htaccess重写并没有按预期工作

时间:2014-10-06 15:47:34

标签: php apache .htaccess mod-rewrite

我有一个index.php文件,其中包含以下几行:

if(isset($_GET["page"]))
{
    $page=$_GET["page"];
    setcookie("page",$page,time()+315360000);
}
else if(isset($_COOKIE["page"]))
{
    $page=$_COOKIE["page"];
}
else
{
    $page="stock";
}

这是一个简单的页面处理程序脚本,如果您的URL中没有变量,则会打开上次查看的页面。

现在我想用.htaccess文件重写URL,我的结果真的很奇怪。 我的网页托管在www.host.com/directory/index.php等服务器上

基本上,我希望网址看起来像www.host.com/directory/$page

.htacces文件被放置在"目录",并且其中包含以下行:

RewriteEngine on
RewriteRule ^(.*)$ index.php?page=$1 [NC]

我的问题: 如果系统可以根据$ page变量找到文件,则会包含该文件。如果文件不存在,将显示错误页面。现在,在错误页面上,我回显了$ page变量,它是" index.php"。

我的代码有什么问题,我该如何解决?我之前从未写过任何.htaccess ... 谢谢你的回答!

1 个答案:

答案 0 :(得分:2)

您的规则正在循环,您需要添加一些条件来防止这种情况发生:

RewriteEngine on
RewriteCond $1 !^index\.php
RewriteRule ^(.*)$ index.php?page=$1 [NC]

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [NC]