从IIS ISAPI重写到Apache mod_rewrite

时间:2016-09-12 21:28:14

标签: apache .htaccess mod-rewrite iis

我已经看到很少有人在这里问过这个问题,但到目前为止我提供的解决方案都没有。

我们一直在开发IIS ISAPI重写(在Windows上),突然之一客户决定将项目放在运行Apache的Linux服务器上。结果,一些规则不再有效。

ISAPI重写规则示例:

RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^login/?([^/]*)([^/]*)$ /login.cfm?msg=$1&$2 [L,QSA]
RewriteRule ^login.cfm$  /login/ [R=301,L,NC]

login.cfm是一个实际的现有页面,不是基于模板动态生成的。

有人可以帮我解释如何为Apache mod_rewrite翻译吗?目前,该规则创建了一个不定式循环,输出为:

  

登录/?msg =&amp;&amp; msg =&amp;&amp; msg =&amp;&amp; msg =&amp;&amp; msg =&amp;&amp; msg ...(直到网址长度的限制)< / p>

安全地说找不到页面,所以它甚至不检查具有这种名称的文件是否存在。

页面可能是/ login或/ login / wrong,因此规则应该识别这两种情况。

1 个答案:

答案 0 :(得分:1)

您可以在站点根目录中使用这些规则.htaccess:

RewriteEngine On

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} /login\.cfm\?msg=([^\s&]*)\s [NC]
RewriteRule ^ /login/%1? [R=301,L,NE]

# internal forward from pretty URL to actual one
RewriteRule ^login(?:/([\w-]+))?/?$ login.cfm?msg=$1 [L,QSA,NC]