【发布时间】:2019-04-19 02:57:10
【问题描述】:
我正在努力解决重定向但没有任何成功。
我更改了网站的 URL,强制使用默认语言,之前是 site.com/help/,现在是 site.com/en/help/。感谢 Stack Overflow 的帮助,我进行了重定向,但后来我遇到了 AMP 页面的新问题:site.com/amp/help/ 现在被重定向到 site.com/en/amp/help/,而它们应该是 site.com/amp/en/help/。
再次感谢本网站的帮助,我将 URL 的结构更改为 site.com/en/help/amp/(始终位于末尾)。为此,我不得不删除某些页面中的 .php 扩展名,并决定删除尾部斜杠。
我现在面临两个新问题:301 重定向到非 .php 页面和带有尾部斜杠到非尾部斜杠的 URL 不起作用。下面是我的 htaccess 代码。
RewriteEngine on
# amp
RewriteRule ^(.*/)?amp/(.+?)/?$ /$1$2/amp [R=301,NC,L]
## redirect to default language (fr)
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond %{REQUEST_URI} !/inc
RewriteCond %{REQUEST_URI} !/ajax/
RewriteCond %{REQUEST_URI} !/img/
RewriteRule ^(?![a-z]{2}(?:[/-]|$))(.*)$ /fr/$1 [R=301,L,NE]
## Unless directory, remove trailing slash
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/$ /$1 [R=301,NE,L]
## add trailing slash in front of directories
RewriteCond %{DOCUMENT_ROOT}/$1 -d
RewriteRule ^[a-z]{2}(?:-[a-z]{2})?/(.+)$ /$1/ [L]
# remove .php
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond %{REQUEST_FILENAME} !global.js
RewriteCond %{REQUEST_URI} !/ajax/
RewriteCond %{REQUEST_URI} !results.php
RewriteRule ^(.+)\.php(.*)$ /$1$2 [R=301,NC,NE,L]
## amp pages
RewriteRule ^(.*)/amp$ /$1?amp=1 [NC,QSA,L]
## folders of languages
#RewriteRule ^([a-z]{2}(?:-[a-z]{2})?)/(.*)$ /$2?lang=$1 [QSA,L]
RewriteRule ^([a-z]{2}|[a-z]{2}-[a-z]{2})$ /$2?lang=$1 [QSA,L]
RewriteRule ^([a-z]{2}|[a-z]{2}-[a-z]{2})/(.*)$ /$2?lang=$1 [QSA,L]
## hide .php extention
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_FILENAME} !global.js
RewriteRule ^(.+?)/?$ $1.php [L]
【问题讨论】:
-
在根目录中。而且我实际上没有任何amp目录
-
我们刚刚决定将 /amp 设置为 AMP 页面和所有语言的根目录,您会怎么做?
-
好的,我想现在换一种方式,你觉得 site.com/en/help/amp/ (amp/) 总是放在最后
-
I4m 只是尝试使用一个简单而单一的约定 :) 所以我会选择我认为最好的
site.com/en/help/amp/:) -
好的,我会这样做的,我会告诉你的 :) thanjs 再次为你提供建议 :)
标签: regex .htaccess url-rewriting