【问题标题】:HTACCESS causing 500 Internal Server ErrorHTACCESS 导致 500 内部服务器错误
【发布时间】:2013-05-02 22:52:24
【问题描述】:

注意:这里没有对代码进行清理,以便简单地解释问题,保持基础。我的生产代码会在处理之前清理 $_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 echo 2 它应该做什么。

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

RewriteRule ^cat$ ?cat=cat

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

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

【问题讨论】:

  • 您的重写规则导致无限循环,apache 可能在 10 次重定向后中断。尝试查看它们,尤其是这个:RewriteRule ^(.*) ?cat=$1

标签: php .htaccess mod-rewrite


【解决方案1】:

您可以清理一些规则,但您需要添加一个条件以防止规则循环。重写引擎将通过您的规则不断运行请求 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

【讨论】:

    猜你喜欢
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2013-08-11
    • 2012-03-29
    • 2014-04-14
    相关资源
    最近更新 更多