Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.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 多个动态url重写重定向到404页面_Php_Apache_Url_Web Applications_Url Rewriting - Fatal编程技术网

Php 多个动态url重写重定向到404页面

Php 多个动态url重写重定向到404页面,php,apache,url,web-applications,url-rewriting,Php,Apache,Url,Web Applications,Url Rewriting,我正在做一个从数据库获取数据的项目。我用URL重写的方法。我正在使用重写方法,它将重定向到错误页面 动态url http://www.sample.com/?cat=kk 重写的URL http:/www.sample.com/kk 为重写此URL而编写的.htaccess文件 RewriteEngine On RewriteRule ^([^/]*)$ /?cat=$1 [L] .htaccess文件还包含另一个url重写 RewriteRule ^([^/]*)/([^/]*)/([

我正在做一个从数据库获取数据的项目。我用URL重写的方法。我正在使用重写方法,它将重定向到错误页面

动态url

http://www.sample.com/?cat=kk
重写的URL

http:/www.sample.com/kk
为重写此URL而编写的
.htaccess
文件

RewriteEngine On
RewriteRule ^([^/]*)$ /?cat=$1 [L]
.htaccess文件还包含另一个url重写

 RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)\.html$ /?cat=$1&sub=$2&year=$3&page=$4 [L]


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

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

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

 RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ /?cat=$1&sub=$2&pag=$3 [L]

 RewriteRule ^([^/]*)/$ /?cat=$1 [L]

  RewriteCond %{REQUEST_FILENAME} !-f

  RewriteCond %{REQUEST_FILENAME} !-d

我遇到的问题是,当我访问任何页面时,它将重定向到服务器默认错误页面。

很抱歉这么说,但是您的重写规则很混乱

总是从最复杂的到最简单的开始

您已经忘记了最重要的指令之一:
QSA
。我让你用谷歌搜索这个;)

也许接下来的方法仍然不起作用,但它更干净。 我们需要日志文件来知道发生了什么

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)\.html$ /?cat=$1&sub=$2&year=$3&page=$4 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ /?cat=$1&sub=$2&page=$3 [QSA,L]

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?$ /?cat=$1 [QSA,L]

尝试检查您的
错误日志
文件以获得提示,然后注释掉所有重写规则并逐个启用它们,直到您发现哪一条规则破坏了内容。您的示例中的最后两条规则要求在它们下面有一条重写规则,我在您的代码中没有看到这条规则?在404错误中,有什么URL没有找到?您需要为每个规则重写COND,这样规则就不会无限期地运行。