htaccess迁移到Mamp

用户名

我正在设置网站的工作副本,并将整个网站复制到模板。但是我在设置.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错误,重定向过多。

武士8

该变量%{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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章