我希望使用RewriteMap在重写文本文件中进行一些模式匹配,但它似乎不起作用。以下是apache配置。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteLog "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/apache1.log"
RewriteLogLevel 5
RewriteMap lowercase int:tolower
RewriteMap escape int:escape
RewriteMap sitelevel_external "txt:C:/Program Files (x86)/Apache Software Foundation/Apache2.2/conf/html1/content/dam/redirect.txt"
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteCond ${lowercase:%1} ^(.*)$
RewriteCond ${escape:%1} ^(.*)$
RewriteCond ${sitelevel_external:%1|NOT_FOUND} !NOT_FOUND
RewriteRule ^(.*) ${sitelevel_external:%1} [QSA,NC,NE,L,R=301,E=nocache:1]
redirect.txt文件内容为
^/delivery-delay.html$ http://www.yahoo.com // doesn't work
/delivery-delay.html$ http://www.yahoo.com // doesn't work
/delivery-delay.html http://www.yahoo.com // Works
如果我使用URL http://localhost/delivery-delay.html,只有当第三个规则在那里时才会重定向到yahoo。如果我有前两个条件,Apache不会重定向并抛出404。
答案 0 :(得分:0)
使用标准纯文本(sitelevel_external
)文件无法处理正则表达式,文本文件将仅在关键映射中进行转换。
RewriteMap
处理不同类型的匹配,但如果您使用文本文件,则只需查找完全匹配即可。可能External Rewriting Program
可以满足您的需求,但请注意并保持简单,
“如果此程序挂起,则会在尝试时导致Apache挂起 使用相关的重写规则。“