2011-02-26 48 views
1

我试图重写搜索结果页面URL到/search/query-1.html ,但当我尝试搜索一个具有斜杠的关键字“/ “或”#“(例如A/D)它会返回一个404错误。mod_rewrite搜索功能,斜杠问题(404错误)

我的.htaccess有以下几点:

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

可以采取什么问题吗?

谢谢。

+0

请出示不起作用 – 2011-02-26 19:33:32

+0

一个例子网址嗨,这一个作品http://localhost/search/test/abc-1.html和这一个没有(网址编码查询):http://localhost/search/test%2Fabc-1.html – slimb 2011-02-26 20:36:42

回答

2

如果你想要像你在评论中提到阿帕奇接受编码的斜线,你必须使用AllowEncodedSlashes directive,使其能够在您的服务器配置:

AllowEncodedSlashes on 

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

但是,它可能是散列插入到解码的查询字符串中,这可能会导致一些问题。如果发现是这种情况,你的Apache安装足够新,你应该B flag添加到您的RewriteRule以确保反向引用适当转义:

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

B标志是我需要什么,我可以操纵GET请求使用PHP ..谢谢:) – slimb 2011-03-06 18:17:29