我正在设置网站的工作副本,并将整个网站复制到模板。但是我在设置.htaccess的工作版本时遇到问题。
本地主机上的工作目录为“ folder1”。
这是实时的.htaccess:
RewriteEngine On
RewriteBase /
# Rewrite site site.eu to site.eu/en/
RewriteCond %{QUERY_STRING} !language=(sv|en|ru|jp)
RewriteRule ^$ en/ [L,R=301]
# Add trailing slash if necessary
RewriteRule ^(sv|en|ru|jp)$ $1/ [R=301,L]
# Add language part to old bookmarks/links
RewriteCond %{REQUEST_URI} !^/(sv|en|ru|jp)/
RewriteCond %{QUERY_STRING} !language=(sv|en|ru|jp)
RewriteRule (sale|brands|latest_in_stock)(.*) en/$1$2 [R=301,L]
# Remove www
RewriteCond %{HTTP_HOST} ^www\.site\.eu$ [NC]
RewriteRule (.*) http://site.eu/$1 [R=301,L]
RewriteRule ^(sv|en|ru|jp)/(.*)$ $2?language=$1 [L,QSA]
RewriteRule ^sale sale.php [L,QSA,NC]
RewriteRule ^brands/([^/]+) /designer.php?idnr=$1 [L,QSA,NC]
RewriteRule ^brands /labelList.php [L,QSA,NC]
...
在本地副本上,我更改为:
RewriteBase /folder1/
我试图删除“将语言代码添加到旧...”部分和“删除www”部分。我还尝试了对最后一个RewriteRule进行其他更改,例如,添加“ folder1”并将其从RewriteBase中删除。
RewriteRule ^brands /folder1/labelList.php [L,QSA,NC]
php文件和index文件工作正常,但例如/ brands都没有。我收到500错误,重定向过多。
该变量%{REQUEST_URI}
将包含域名后面的部分,而不管其位于哪个.htaccess文件中。将发生以下情况:
我们从开始localhost/en/brands/asdf
。它符合以下规则:
RewriteCond %{REQUEST_URI} !^/(sv|en|ru|jp)/
RewriteCond %{QUERY_STRING} !language=(sv|en|ru|jp)
RewriteRule (sale|brands|latest_in_stock)(.*) en/$1$2 [R=301,L]
第一个条件为true,因为^/(sv|en|ru|jp)/
不匹配/folder1/en/...
。第二个条件为true,因为我们尚未达到在查询字符串中设置语言的规则。最后,它将匹配最后一个,因为(sale|brands|latest_in_stock)(.*)
它将匹配en/brands/asdf
($1
将包含brands
和$2
将包含/asdf
)。localhost/folder1/en/brands/asdf
重新添加目录前缀后,它将重定向到。
您有几种选择:
1.将folder1添加到条件中
如果将folder1添加到带有的条件中%{REQUEST_URI}
,则不会发生此问题:
RewriteCond %{REQUEST_URI} !^/folder1/(sv|en|ru|jp)/
2.添加负面的前瞻性
如果您向规则添加否定的前瞻并删除条件,则说明事情可以正确进行,因为的第一个参数RewriteRule
将与您期望的匹配。这样做的好处是您无需知道这是在哪个目录中:
#Remove this: RewriteCond %{REQUEST_URI} !^/(sv|en|ru|jp)/
RewriteCond %{QUERY_STRING} !language=(sv|en|ru|jp)
RewriteRule ^(?!(sv|en|ru|jp)/)[^/]*/?(sale|brands|latest_in_stock)(.*) en/$1$2 [R=301,L]
您可能需要更改捕获组引用。我不能在这里测试它们。
3.移动规则
移动以下规则:
RewriteRule ^(sv|en|ru|jp)/(.*)$ $2?language=$1 [L,QSA]
在我刚刚指出的规则之上,应该从理论上解决这个问题。我强烈建议您不要使用此解决方案,因为混合使用重定向和重写会使读取变得非常困难。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句