我在.htaccess文件上有一个url重写问题。该文件有两个规则:
规则1 //当用户在浏览器上打开“example.com/test.php”时,用户将被重定向到“example.com/test”。
htaccess rule: RewriteRule ^test.php(.*)$ http://example.com/test/$1 [r=301,nc]
规则2 //当用户打开“example.com/test”时,我们将从“example.com/test.php”中检索内容。
htaccess rule: RewriteRule ^test/ test.php [NC]
现在这些规则不起作用,也许某处存在冲突。 我应该为上述条件使用哪些重写规则?
答案 0 :(得分:1)
这两条规则相互冲突。一个人将test.php写入测试,另一个人将测试写入test.php,这可能会让你陷入无限循环,无论是在重写引擎内还是在浏览器和服务器之间,取决于你如何实现重写。
为了解决这个问题,我使用了一个条件来检查请求的URI而不是当前重写的URI。
试试这个:
RewriteRule ^test/$ test.php [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]+\ (/[^\ ]*)\.php[?\ ]
RewriteRule ^test\.php(.*)$ http://example.com/test/$1 [R=301,NC]
值得注意的事情也可能是因素:
test.php
中转义该点