遇到了重写而不是重写的麻烦


Having troubles having a rewrite not rewrite for something

我进行了一次重写,将字符串site.com/foo重写为site.com/?loc=foo.php。它工作得很好,但当我输入site.com/foo.php时,它没有重写为site.com/?loc=foo.php.php,而是重写为除不带CSS之外显示site.com/?loc=foo.php的其他内容。我希望它重写为site.com/?loc=foo.php.php

我有一个index.php,它读取$loc并包含foo.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ ?loc=$1.php

故障排除:

我在index.php上回应了$loc,根本没有反馈。然后我在foo.php上响应$loc,发现$loc没有声明。这导致了site.com/foo.php由于某种原因没有在上面的代码中被重写的结论。

您拥有的脚本应该可以正常工作。以下是我测试的内容。

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ ?loc=$1.php

这意味着:

1) .htaccess中有另一个干扰的参数。注释掉(用#)除上述内容之外的任何行。然后把他们一个接一个地(或尽可能少地)拉回来,直到你找到罪魁祸首。

2) loc.php确实存在。-f表示"如果文件不存在"

3) 当您生成$loc时,出于某种原因,您正在排除可变对象。您可以通过将顶部添加到index.php文件中进行检查。第一行显示get(应该是"lol"=>"loc.php"),第二行显示所有进行的分配:

<?php
  print_r($_GET);
  echo '<br><br>';
  print_r($_SERVER);
?>