对于以下示例URL,我需要在.htaccess中重写规则:
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”之后的字符串?
答案 0 :(得分:1)
这是我到目前为止提出的,但是唯一的结果是404(未找到):
RewriteEngine on RewriteCond %{QUERY_STRING} ^book=18(.*)$ RewriteRule ^(.*)book=(.*)$ http://www.examplesite.com/books/2018/$1.pdf [R=301,L]
如评论中所述,它试图同时匹配两个不同的URL:一个在查询字符串中包含信息(在“虚数” ?
之后),另一个在其中包含在URL路径中。因此,它可能什么也没做。因此是404。
我希望
$1
应该引用“ 18”之后的字符串,因为条件中唯一带括号的组包含该字符串
$1
指RewriteRule
模式中的第一个括号组(其中有两个)。如果要匹配最后匹配的条件中的第一个子模式,则需要使用%1
形式的反向引用。
但是,您的示例不包含?
,因此没有查询字符串。该信息改为包含在UR1路径中。 (除非这是您的问题中的错字?!它看起来像是错字,因为=
是多余的。但这也将完全改变您的问题。)
要重定向URL example.com/book=18ABCDEFG
(即URL路径中的信息),则在文档根目录中.htaccess
文件顶部附近需要以下内容:
RewriteEngine on
RewriteRule ^book=18([^/]+)$ /books/2018/$1.pdf [R=302,L]
如果代码只能是特定字符,则正则表达式应适当地特定。就目前而言,它几乎可以匹配任何东西。
使用302(临时)重定向进行测试,只有在确定它可以正常工作(如果打算用作永久重定向并由浏览器缓存)时,才更改为301(永久)。 / p>
在测试之前,您需要清除浏览器缓存。