我有一个以常规内容开头的 htaccess 文件:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
然后有一些重写,例如:
RewriteRule ^protect/?$ /Legal/Your-Financial-Protection.aspx [NC, L, R=301]
然后以重写映射结束:
RewriteMap map txt:rewritemaps/map.txt [NC]
RewriteRule ^(.+)$ ${map:$1} [R=301]
rewritemap 包含我们所有的旧 url - 我们当前站点上的页面和将被重定向到新站点上的等效页面的短 url(大约有 4k,所以我真的需要使用地图):
Inspiration.aspx /Inspiration.aspx
Destinations/Africa/Countries/Gabon.aspx /Destinations/Africa/Gabon.aspx
indonesia /Destinations/Southeast-Asia/Indonesia.aspx
问题是,启用 rewritemap(即未注释掉)后,我所有的 url(即使是那些不匹配的)都重定向到 / - 包括样式表、js、图像等。
我所追求的是与地图中的模式匹配以重定向到替换和其他所有内容的uris(即保持不变)。
我尝试在地图上设置默认值 $1:
RewriteRule ^(.+)$ ${map:$1|$1} [R=301]
但这只会导致重定向循环。我想我也可以跳过所有 .css、.js、.jpg 等的重写,但宁愿不必维护已用文件扩展名的列表。
仅供参考,我使用的是 HeliconTech 的 ISAPIRewrite(因为我在 IIS 6 上),尽管它声称可以按照 apache 处理重写映射,而且我们过去从未遇到过问题。
任何帮助将不胜感激!
谢谢,亚当