【问题标题】:mod_rewrite search feature, problem with slash (404 error)mod_rewrite 搜索功能,斜线问题(404 错误)
【发布时间】:2023-03-14 06:50:01
【问题描述】:

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

我的 .htaccess 有以下内容:

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

可能是什么问题?

谢谢。

【问题讨论】:

标签: regex apache search mod-rewrite slash


【解决方案1】:

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

AllowEncodedSlashes on

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

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

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

【讨论】:

  • B 标志是我需要的,我可以使用 php 操作 GET 请求。谢谢 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 2016-12-25
  • 1970-01-01
  • 2022-01-06
  • 2011-06-28
相关资源
最近更新 更多