HTACCESS导致500内部服务器错误

时间:2013-05-02 22:52:25

标签: php .htaccess mod-rewrite

注意:此处的代码未经过清理,只是为了简单解释问题,保持基础知识。我的生产代码将在处理之前清理$ _GET。

这是我的.htaccess文件:

RewriteEngine on
RewriteCond %{REQUEST_URI} "/files/"

RewriteRule (.*) $1 [L]
RewriteRule ^(.*)/(.*)$ ?cat=$1&title=$2 [L]
RewriteRule ^(.*) ?cat=$1

这是我的PHP文件:

$cat = $_GET['cat'];
$title = $_GET['title'];

if($cat && !$title) {
    echo 1;
} 

if($cat && $title) {
    echo 2;
}

如果我转到我的测试网址:http://local.testzone.com/cat/titlehttp://local.testzone.com/cat

我收到500内部服务器错误。

如果我评论.htaccess文件中的最后一行:

#RewriteRule ^(.*) ?cat=$1

http://local.testzone.com/cat给了我:

  

未找到

     

在此服务器上找不到请求的URL / cat。

http://local.testzone.com/cat/title给了我:

  

2

如果cat和title存在,根据我的php回显2,它应该做什么。

我的问题是 - 如何修改访问文件,如果只有一只猫,它会回显1?我能做到这一点的唯一方法是手动设置第一级,如下所示:

RewriteRule ^cat$ ?cat=cat

这有效,但在我写的应用程序中不起作用。我需要根据URL中的cat值查询数据库。 cat值可以动态更改,我无法将其硬编码到htaccess文件中。标题工作正常,但我如何让猫部分运作?

希望我的要求清楚,期待任何帮助!

1 个答案:

答案 0 :(得分:0)

您可以清除一些规则,但需要添加条件以防止规则循环。重写启动将通过您的规则不断运行请求URI,直到URI停止更改(或者您达到内部递归限制,因此500错误)。

RewriteEngine on

RewriteRule ^/?files/ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ ?cat=$1&title=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) ?cat=$1