[英]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/title或http://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.