繁体   English   中英

从 IIS ISAPI 重写迁移到 Apache mod_rewrite

[英]Moving from IIS ISAPI rewrite to Apache mod_rewrite

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

我们一直在为 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 翻译这个吗? 目前该规则创建一个不定式循环,输出为:

login/?msg=&&msg=&&msg=&&msg=&&msg=&&msg...(直到url长度限制)

可以肯定地说,也找不到该页面,因此它甚至不检查具有此类名称的文件是否存在。

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

您可以在站点根目录 .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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM