【发布时间】:2018-12-03 14:40:05
【问题描述】:
我需要在我的 .htaccess 中为以下示例 URL 设置重写规则:
https://www.example.com/book=18ABCDEFG
这是我需要的结果 URL:
https://www.example.com/books/2018/ABCDEFG.pdf
我花了几个小时在谷歌上搜索并试图解决这个问题,但我真的被困住了。如果那里有重写向导,我将非常感谢您的帮助。
已编辑:
这是我到目前为止想出的,但唯一的结果是 404(未找到):
RewriteEngine on
RewriteCond %{QUERY_STRING} ^book=18(.*)$
RewriteRule ^(.*)book=(.*)$ http://www.examplesite.com/books/2018/$1.pdf [R=301,L]
我希望$1 应该引用“18”之后的字符串,因为条件中唯一带括号的组包含该字符串,但到目前为止我还没有找到正确的语法。
我也应该解释一下“18”。现在 URL 不同了,对于具有这种模式的书籍 URL,2018 年将永远不会有其他年份。所以可以硬编码。
但是如何在重写规则中引用“18”之后的字符串呢?
【问题讨论】:
-
旧网址中没有
?,例如:https://www.examplesite.com/?book=18ABCDEFG -
?在请求的 URL 中是否存在(或不存在)会改变您编写指令以匹配它的方式。您发布的指令试图匹配两者,一个包含?(即“查询字符串”)的URL和一个没有?的URL - 所以这永远不会匹配,除非你的URL真的是表格:example.com/book=18ABCDEFG?book=18ABCDEFG?但是,您并没有像在查询字符串中那样排除 URL 路径中的“18”? -
不,没有?在旧网址中。该 URL 与我的问题中显示的形式完全相同。所以我应该使用什么而不是 QUERY_STRING?
标签: .htaccess mod-rewrite