重写规则 - 如果传入的请求不是由某些字符组成,则重写为其他URL

时间:2009-05-11 11:16:03

标签: apache mod-rewrite

如何构建一个规则,检查传入请求是否属于某些条款,如果不是,则重新路由到其他URL?

例如,我有一个网站my.example.com。如果传入的URL是my.example.com/login,那么它应该执行该请求。如果是其他内容(不是login),则必须将请求重新路由到your.example.com。例如,

  • my.example.com/login2必须重新路由到your.example.com/login2
  • my.example.com/nologin必须重新路由到your.example.com/nologin
  • my.example.com/getname必须重新路由到your.example.com/getname

当然,如果它是

  • my.example.com/login必须重新路由到my.example.com/login

如何使用RewriteRulemod_rewrite来实现这一目标?

3 个答案:

答案 0 :(得分:4)

尝试此规则:

RewriteCond %{HTTP_HOST} ^my\.example\.com$
RewriteRule !^login$ http://your.example.com%{REQUEST_URI} [L,R=301]

答案 1 :(得分:0)

RewriteCond %{HTTP_HOST}   !^www\.myexample\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://www.myexample.com/$1 [L,R]

答案 2 :(得分:0)

我知道这不是你要求的,但是可以通过使用.htaccess将所有请求(有效或无效)直接发送到一个文件&然后使用服务器端脚本(例如我的PHP)来切换有效选项,使用默认重定向到另一个URL来捕获任何其他内容。

e.g。这样:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php

将任何不是实际文件或目录请求的内容发送到index.php