我有一个子域指向我网站的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)
任何人都知道为什么会这样,以及如何完成我想要做的事情?
答案 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]