Apache Rewrite 规则冲突

Apache Rewrite 规则冲突

我正在研究 Apache 2.4 中的重写规则,其中任何以 .pdf/ 结尾的 URL 都应添加查询参数并将其转换为 .pdf?q=pdf。

例子:http://www.example.com/us/elections.pdf/应该转变为http://www.example.com/us/elections.pdf?q=pdf

我尝试使用以下规则并且成功了

RedirectMatch 301 ^(.*).pdf/ $1.pdf?q=pdf

问题是我们在网站上也有一些链接,如 {hostname}/us/elections.pdf/节点/img.thumbnail.png

为此,上述规则是在前面添加 q=pdf节点并像 {hostname}/us/elections.pdf?q=pdf_node_/img.thumbnail.png 那样进行转换

我怎样才能避免这种情况发生?

我如何才能转换我的规则,使它只对末尾带有 .pdf/ 的链接起作用?

任何帮助都将非常有帮助。

答案1

如果您希望正则表达式仅在以“ .pdf/”结尾时匹配,那么您应该相应地编写正则表达式并包含字符串锚点的结尾。

改变:

RedirectMatch 301 ^(.*).pdf/ $1.pdf?q=pdf

到:

RedirectMatch 301 ^(.*).pdf/$ $1.pdf?q=pdf

注意$在正则表达式的末尾。

相关内容