繁体   English   中英

HTACCESS导致500内部服务器错误

[英]HTACCESS causing 500 Internal Server Error

注意:此处不对代码进行清理,以简化问题的说明,保持基础。 我的生产代码会在处理之前清理$ _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

这是应该做的,根据我的PHP echo 2(如果cat和title存在)。

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

RewriteRule ^cat$ ?cat=cat

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

希望我的要求明确,期待任何帮助!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM