我正在尝试使用IIS Isapi Rewrite执行以下操作...
我需要将seo友好的URL(静默地)转换回应用程序友好的URL,如下所示:
RewriteRule ^/seo-friendly-url/ /test/index.cfm [I,L]
足够简单。
但是我还需要已经在搜索引擎中编入索引的URL(例如)301重定向到seo友好版本。像这样:
RewriteRule ^/test/index.cfm /seo-friendly-url/ [I,R=301]
这些中的每一个都是孤立的。但是,当我在我的.ini文件中同时使用/ seo-friendly-url /在我的浏览器地址栏中显示时,我正在服务404.(是的,/ test / index.cfm肯定存在!)< / p>
我知道它看起来像一个循环引用,但第一条规则只重写了IIS和应用程序之间的URL - 没有重定向,所以我不是第二次击中Isapi Rewrite。或者我错了吗?
我已经启用了对Isapi Rewrite的登录,我看到了以下内容:
HttpFilterProc SF_NOTIFY_PREPROC_HEADERS
DoRewrites
New Url: '/seo-friendly-url/'
ApplyRules (depth=0)
Rule 1 : 1
Result (length 15): /test/index.cfm
ApplyRules (depth=1)
Rule 1 : -1
Rule 2 : 1
Result (length 18): /seo-friendly-url/
ApplyRules: returning 301
ApplyRules: returning 1
Rewrite Url to: '/seo-friendly-url/'
有人有任何想法吗?
答案 0 :(得分:0)
这里有两个不同的重写,如果你做得对,它应该可以正常工作
客户端用户代理从未见过第一个。它请求/ seo友好,你在内部重写它并回复
第二个不是重写,而是重定向。你把它发送回客户端并重新请求/ seo友好 - 我认为你需要使用[R = 301,L]来说这是行的结束 - 只需返回它(L确实如此)那)
答案 1 :(得分:0)
通过一些试验和错误,我想出了一个解决方案。
使用$符号指定重定向匹配位于字符串的末尾:
RewriteRule ^/test/index.cfm$ /seo-friendly-url/ [I,R=301]
使重写的网址与重定向匹配字符串完全不同 - 在这种情况下添加不必要的“?”:
RewriteRule ^/seo-friendly-url/ /test/index.cfm? [I,L]