【问题标题】:multiple dynamic url rewriting redirect to 404 page多个动态url重写重定向到404页面
【发布时间】:2012-08-07 17:24:55
【问题描述】:

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

动态网址

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

重写后的网址

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

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

【问题讨论】:

  • 尝试检查您的error_log 文件以获取提示,然后注释掉所有重写规则并逐一启用它们,直到您找出哪个破坏了事物。您示例中的最后两个规则需要在它们下面有一个 RewriteRule,我在您的代码中没有看到。
  • “默认错误页面”是指 500 错误还是 404?在 404 错误中,它所说的 URL 是什么?
  • 每个规则都需要 RewriteCond,这样规则就不会无限期地运行。

标签: php apache url web-applications url-rewriting


【解决方案1】:

我很抱歉这么说,但你的重写规则很乱。

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

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

【讨论】:

    猜你喜欢
    • 2021-11-21
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多