htaccess重写规则相同的域名

时间:2014-05-30 15:43:42

标签: php .htaccess mod-rewrite

我在.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]

现在这些规则不起作用,也许某处存在冲突。 我应该为上述条件使用哪些重写规则?

1 个答案:

答案 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]

值得注意的事情也可能是因素:

  1. 您在第一次重写
  2. 时未在test.php中转义该点
  3. Apache MultiViews指令可能会妨碍您在.htaccess中使用URI之前进行一些重写。如果您有文件test.php,但是只向http://example.com/test发出了请求,那么您的htaccess将使用test.php,而不仅仅是按照您的预期进行测试。
  4. 浏览器缓存重定向,这会导致难以诊断问题