我进行了重写,将字符串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
在上述代码中由于某种原因没有被重写。
答案 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);
?>