Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php HTACCESS导致500内部服务器错误_Php_.htaccess_Mod Rewrite - Fatal编程技术网

Php HTACCESS导致500内部服务器错误

Php HTACCESS导致500内部服务器错误,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,注意:为了简单地解释问题,这里没有对代码进行清理,保留了基本知识。我的生产代码将在处理之前对$\u GET进行清理 这是我的.htaccess文件: RewriteEngine on RewriteCond %{REQUEST_URI} "/files/" RewriteRule (.*) $1 [L] RewriteRule ^(.*)/(.*)$ ?cat=$1&title=$2 [L] RewriteRule ^(.*) ?cat=$1 #RewriteRu

注意:为了简单地解释问题,这里没有对代码进行清理,保留了基本知识。我的生产代码将在处理之前对$\u GET进行清理

这是我的.htaccess文件:

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

RewriteRule (.*) $1 [L]
RewriteRule ^(.*)/(.*)$ ?cat=$1&title=$2 [L]
RewriteRule ^(.*) ?cat=$1
#RewriteRule ^(.*) ?cat=$1
这是我的PHP文件:

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

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

if($cat && $title) {
    echo 2;
}
如果我转到我的测试url:或

我得到一个500内部服务器错误

如果我注释.htaccess文件中的最后一行:

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

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

找不到

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

给我:

二,

这就是它应该做的,根据我的php echo 2,如果cat和title存在的话

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

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


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

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

您的重写规则会导致无限循环,apache可能会在10次重定向后中断。试着复习它们,尤其是这一条:重写规则^.*?cat=$1