我进行了一次重写,将字符串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);
?>