有重写没有重写的麻烦

时间:2012-07-24 06:30:17

标签: php regex .htaccess mod-rewrite rewrite

我进行了重写,将字符串site.com/foo重写为site.com/?loc=foo.php。它运行正常,但是当我输入site.com/foo.php时,它会重写为显示site.com/?loc=foo.php.php的其他内容,而不是重写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

故障排除:

我在$loc上回复index.php,根本没有任何反馈意见。然后我在$loc上回复foo.php,发现$loc未被声明。这导致得出的结论是site.com/foo.php在上述代码中由于某种原因没有被重写。

1 个答案:

答案 0 :(得分:1)

你的脚本应该可以正常工作。这是我测试的内容。

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

这意味着:

1).htaccess中有另一个参数会干扰。注释掉(带#)除上述之外的任何行。然后将它们一个接一个地(或尽可能少地)拉回来,直到找到小鹦鹉。

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

3)当你生成$ loc时,你出于某种原因排除了变量。您可以通过将top添加到index.php文件来进行检查。第一行显示get(应该是'lol'=>'loc.php.php'),第二行显示所有已经进行的忏悔:

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