Magento从旧网址重定向到具有存储(语言)代码的新网址

编程入门 行业动态 更新时间:2024-10-26 18:25:08
本文介绍了Magento从旧网址重定向到具有存储(语言)代码的新网址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

说明: 我用以下存储配置来设置Magento:

The Description: I set up Magento with store config like this:

  • 公司名称-网站
    • 主要商店-商店
      • zh_CN -商店视图
      • dk -商店视图
      • Company Name - Webside
        • Main Store - Store
          • en - Store View
          • dk - Store View

          我的链接如下: my-company/shop/ 然后我重新确认这是我需要的错误配置,我必须进行更改

          My links looked like: my-company/shop/ Then I reaslised that this was wrong config for my needs and I had to change

          • 英语-网络端
            • 主要商店-商店
              • zh_CN -商店视图
              • English - Webside
                • Main Store - Store
                  • en - Store View
                  • 主要商店-商店
                    • dk -商店视图
                    • Main Store - Store
                      • dk - Store View

                      加,我启用了 Magento功能"将商店代码添加到Urls ",该功能先前已被禁用. 现在我的链接看起来像: my-company/ en /shop/

                      Plus, I enabled Magento feature "Add Store Code to Urls" which was previously disabled. Now my links look like: my-company/en/shop/

                      问题: 由于我已经在未进行更改的情况下制作了站点地图,并将其提交给WebMaster,所以现在我面临的问题是,所有没有在url中存储代码的旧链接都不再有效(不再了( 404代码-找不到).

                      Problem: Since I already made sitemap while the changes were not made and submitted it to WebMasters, now I am facing the problem that all of the old links without store code in url does not work anymore (404 code - not found).

                      由于WebMasters和其他原因,我真的很想实现此结果: 当有人尝试打开没有商店代码的旧网址之一时(例如 my-company/shop/),我希望通过将商店代码添加为url中的第一段来将他重定向到新url.

                      Because of WebMasters and other reasons I would really like to achieve this Result: When somebody tries to open one of the old urls which is without store code (e.g. my-company/shop/), I would like he is redirected to the new url by just adding the store code as the first segment in url.

                      我已经尝试通过向nginx配置中添加一些重写规则来实现此目的,但是我遇到了无限循环,最后我找不到正确的重写规则解决方案. (链接到我的Nginx重写规则问题: Nginx配置位置正则表达式在网址中添加语言代码)

                      完整的Nginx配置:

                      server { # Listen on port 8080 as well as post 443 for SSL connections. listen 8080; listen 443 default ssl; server_name example www.example; 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 ~* "^/(?![a-z]{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; } }

                      推荐答案

                      您的网站字段提供了三种URL:有些漂亮的永久链接不是真实文件(例如/en/shop/),它们在内部被重写和处理.控制器(即/index.php).静态内容是真实文件(CSS文件,图像,javascript),直接由nginx提供.还有一个过时的站点地图(您想将其重定向到其他地方).

                      Your web site fields three kinds of URL: There are the pretty permalinks which are not real files (e.g. /en/shop/) which get internally rewritten and handled by a controller (i.e. /index.php). There is the static content which are real files (CSS files, images, javascript) and are served directly by nginx. And there is the obsolete sitemap (which you want to redirect to something else).

                      问题在于您添加的重写规则也与静态内容匹配.

                      The problem is that the rewrite rule you added also matches the static content.

                      因此,您需要先测试静态内容,然后再测试重定向.这是通过让try_files查看原始URI,然后在@handler块内应用新的重写规则来实现的:

                      So, you need to serve the static content first, before testing for the redirect. This is achieved by letting try_files see the original URI and then applying your new rewrite rule, inside the @handler block:

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

                      这似乎可以在我的测试环境中使用,但是YMMV

                      This seems to work in my test environment, but YMMV

更多推荐

Magento从旧网址重定向到具有存储(语言)代码的新网址

本文发布于:2023-10-31 18:31:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1546920.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:重定向   语言   代码   网址   新网址

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!