我有这个htaccess文件:
RewriteEngine On
RewriteCond %{HTTP_HOST} =test.example.com [NC]
RewriteRule ^((?!test/).*)$ test/$1 [L,NC]
而同一个文件中的“测试”的目录完全一致的副本。 所以,当然,这会导致一个无限循环时的第一个文件传给你再次运行规则的第二个文件。
我曾尝试添加规则RewriteCond %{REQUEST_URI} !^test [L,NC]
在希望REQUEST_URI主张真正的路径,而不是新的“别名”。 然而,它并没有奏效。
有没有什么办法或许检查我们的目录中的条件使用? 或任何其他办法解决这个问题? 随着基础上保持两个文件的代码相同。
如果你是已经test
目录没有一点再次重写test
使用相对路径的目录。 这将是更好地确定RewriteBase
动态和使用绝对路径改写:
RewriteEngine On
# generate BASE dir in env variable %{ENV:BASE}
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} =test.example.com [NC]
RewriteRule ^(.*)$ %{ENV:BASE}test/$1 [L,NC]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
用于防止因为规则的第一重写后重写%{ENV:REDIRECT_STATUS}
变为200
之后。
好吧,怪异,但现在我得到它的工作 - 只要是这样的:
RewriteCond %{HTTP_HOST} =test.example.com [NC]
RewriteCond %{REQUEST_URI} !test [NC]
RewriteRule ^((?!test/).*)$ test/$1 [L,NC]
编辑:好像它仅适用于起始页。 在其他页面,开始尾随的路径斜杠被删除。
文章来源: How avoid infinite loop when htaccess rewrites to a copy of same htaccess-file?