2012-08-07 67 views
0

我正在做一个从数据库中获取数据的项目。我使用URL重写方法。我使用重写方法会重定向到错误页面多个动态网址重写重定向到404页

动态URL

http://www.sample.com/?cat=kk 

的重写URL

http:/www.sample.com/kk 

.htaccess文件中查找该URL书面改写

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 

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

+0

尝试检查您的'error_log'文件中的提示,然后注释掉所有重写规则,并逐个启用它们,直到找出哪一个正在破坏事物。示例中的最后两条规则需要在它们下面有一个RewriteRule,我在代码中看不到它。 – drew010 2012-08-07 17:52:35

+0

“默认错误页面”是指500错误还是404?在404错误中,它说的URL没有找到? – 2012-08-07 18:19:49

+0

对于每个规则,您需要使用RewriteCond,以便规则不会无限期地运行。 – 2012-08-07 18:19:58

回答

0

我很抱歉地说,但你的rewriterules是混乱的。

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

而你忘记了最重要的指令之一: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]