mod_rewrite搜索功能,斜杠问题(404错误)

时间:2011-02-26 19:30:01

标签: regex apache search mod-rewrite slash

我正在尝试将搜索结果页面网址重写为/search/query-1.html 但是当我尝试搜索具有斜杠“/”或“#”的关键字时(例如A / D),它会返回404错误。

我的.htaccess有以下内容:

RewriteEngine on
RewriteRule ^search/(.*)-([0-9]+).html$ index.php?search=$1&page=$2 [L]

可能是什么问题?

感谢。

1 个答案:

答案 0 :(得分:2)

如果您希望Apache接受评论中提到的编码斜杠,则必须使用AllowEncodedSlashes directive在服务器配置中启用它:

AllowEncodedSlashes on

您现在可能没有启用此功能,在这种情况下,默认行为是Apache拒绝带有404响应的请求。您只能在服务器或虚拟主机上下文中指定此指令,因此根据您的环境,您可能无法更改此指令。就编码的哈希符号而言,处理它时不应该有任何问题。

但是, 可能是哈希被插入到解码的查询字符串中,这可能会导致一些问题。如果您发现情况确实如此,并且您的Apache安装足够新,则应将B flag添加到RewriteRule以确保适当地转义反向引用:

RewriteRule ^search/(.*)-([0-9]+).html$ index.php?search=$1&page=$2 [B,L]