将所有与一组RegExes不匹配的请求重定向到不同的子域

时间:2013-12-05 22:44:12

标签: apache .htaccess mod-rewrite

我有一个子域指向我网站的webroot,该子域上的所有内容都由一个PHP页面处理。但是,由于子域设置为www主机的别名而不是其自己的文件夹,因此您还可以通过此子域访问www域中的所有内容。

这会创建一个重复的内容场景,所以我想将所有未被子域处理的页面(除了主页和匹配一个正则表达式的URL之外的所有内容)返回到WWW域。这是我试过的:

# subdomain page
RewriteCond %{HTTP_HOST} ^subdomain\.mysite\.org [NC]
RewriteRule ^sub-([a-z\-]+)/([a-z]+)$ subdomain.php?var=$1&page=$2 [L]

# REDIRECT OTHER REQUESTS BACK TO MAIN SITE
RewriteCond %{HTTP_HOST} ^subdomain\.mysite\.org$ [NC]
RewriteCond %{REQUEST_URI} !^/sub-([a-z\-]+)/([a-z]+)-page$ [NC]
RewriteCond %{REQUEST_URI} !^$ [NC]
RewriteRule ^(.*)$ http://www.mysite.org/$1 [L,R=301]

这段代码不仅似乎将所有流量(甚至应保留在子域上的页面)转发到www域,它似乎取消了规范URL并重定向到具有裸GET字符串的URL(例如, subdomain.mysite.org/sub-1/sub2被重定向到www.mysite.org/subdomain.php?var=1&page=sub2)

任何人都知道为什么会这样,以及如何完成我想要做的事情?

1 个答案:

答案 0 :(得分:1)

当您转到重定向规则时,第一条规则就已经应用了。所以你只需要排除第一条规则的目标:

尝试:

# REDIRECT OTHER REQUESTS BACK TO MAIN SITE
RewriteCond %{HTTP_HOST} ^subdomain\.mysite\.org$ [NC]
RewriteCond %{REQUEST_URI} !^/subdomain\.php
RewriteRule ^(.*)$ http://www.mysite.org/$1 [L,R=301]