Magento从旧的Urlredirect到具有存储(语言)代码的新Url

说明:
我设置了像这样的商店configurationMagento:

  • 公司名称 – Webside
    • 总店 – 商店
      • zh – 存储视图
      • dk – 存储视图

我的链接如下所示: https : //my-company.com/shop/

然后我重新认识到这是我的需求错误的configuration,我不得不改变

  • 英文 – Webside
    • 总店 – 商店
      • zh – 存储视图
  • 丹麦 – Webside
    • 总店 – 商店
      • dk – 存储视图

另外 ,我启用了 Magentofunction“ 添加商店代码到Urls ”,这是以前禁用。
现在我的链接看起来像: https : //my-company.com/ en / shop /

问题:
由于我已经做了网站地图,而没有作出改变,并提交给WebMasters,现在我面临的问题是,没有存储代码在URL中的所有旧链接不再工作(404代码 – 未find)。

由于WebMaster和其他原因,我真的很想实现这个结果:
当有人试图打开一个没有商店代码的旧url(例如https://my-company.com/shop/ )时,我希望只要将商店代码添加到第一个url就可以将其redirect到新的url段中的url。

我已经试图通过添加一些重写规则到我的nginxconfiguration来实现这一点,但我跑进了无限循环,最后我找不到适合重写规则的解决scheme。 (链接到我的nginx重写规则的问题: Nginxconfiguration位置正则expression式与Url中的语言代码 )

完整的Nginxconfiguration:

server { # Listen on port 8080 as well as post 443 for SSL connections. listen 8080; listen 443 default ssl; server_name example.com www.example.com; large_client_header_buffers 4 16k; ssl on; # Specify path to your SSL certificates. ssl_certificate /path/top/certificate.crt; ssl_certificate_key /path/to/key.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; ssl_prefer_server_ciphers on; ssl_dhparam /path/to/dh_params.pem; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; keepalive_timeout 70; add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; ssl_trusted_certificate /path/to/certificate.crt; # Path to the files in which you wish to store your access and error logs. access_log /path/to/access_log; error_log /path/to/error_log; root /path/to/root/folder; location ~* "^/(?![az]{2}/)(.+)$" { rewrite / /en/$1 permanent; } location / { index index.htm index.html index.php; try_files $uri $uri/ @handler; } # Deny access to specific directories no one in particular needs access to anyways. location /app/ { deny all; } location /includes/ { deny all; } location /lib/ { deny all; } location /media/downloadable/ { deny all; } location /pkginfo/ { deny all; } location /report/config.xml { deny all; } location /var/ { deny all; } # Allow only those who have a login name and password to view the export folder. Refer to /etc/nginx/htpassword. location /var/export/ { auth_basic "Restricted"; auth_basic_user_file htpasswd; autoindex on; } # Deny all attempts to access hidden files such as .htaccess, .htpasswd, etc... location ~ /\. { deny all; access_log off; log_not_found off; } # This redirect is added so to use Magentos common front handler when handling incoming URLs. location @handler { rewrite / /index.php?$query_string; } # Forward paths such as /js/index.php/x.js to their relevant handler. location ~ .php/ { rewrite ^(.*.php)/ $1 last; } # Handle the exectution of .php files. location ~ .php$ { if (!-e $request_filename) { rewrite / /index.php last; } expires off; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/path/to/php-fpm.sock; fastcgi_index index.php; fastcgi_param HTTPS on; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param MAGE_RUN_CODE en; fastcgi_param MAGE_RUN_TYPE store; include fastcgi_params; } } 

Solutions Collecting From Web of "Magento从旧的Urlredirect到具有存储(语言)代码的新Url"

你的网站有三种URL:有一些漂亮的固定链接,它们不是真正的文件(例如/en/shop/ ),它们被内部重写并由控制器处理(即/index.php )。 有静态内容是真正的文件(CSS文件,图像,JavaScript),并直接由nginx 。 还有过时的网站地图(你想重定向到别的东西)。

问题是您添加的重写规则也匹配静态内容。

所以,在测试重定向之前,您需要首先提供静态内容。 这是通过让try_files看到原始URI,然后在@handler块中应用新的重写规则来@handler

 location @handler { rewrite "^/(?![az]{2}/)(.+)$" /en/$1 permanent; rewrite / /index.php?$query_string; } 

这似乎在我的测试环境,但YMMV

这个代码我为我的nginx配置添加,也许将是其他的帮助,它也是修复管理区:

 location / { rewrite "^/(?![az]{2}/)(.+)$" /en/$1 permanent; rewrite / /index.php?$query_string; } location /index.php/admin { try_files $uri $uri/ /index.php?$args; index index.php index.html index.htm; }