假设A.com和B.com上的所有请求都在同一台服务器上,我想使用htaccess来控制请求。
默认的www内容根目录为/public_html/
,但我希望将A.com
个请求转发到/public_html/A/
,并将B.com
个请求转发到/public_html/B/
< / p>
我提出了这个解决方案:
#/public_html/.htaccess
# A.com
RewriteCond %{HTTP_HOST} ^A.com$
RewriteCond %{REQUEST_URI} !^/A/
RewriteRule (.*) A/$1 [L]
# B.com
RewriteCond %{HTTP_HOST} ^B.com$
RewriteCond %{REQUEST_URI} !^/B/
RewriteRule (.*) B/$1 [L]
我遇到两个问题:
A.com/A/index.php
和A.com/index.php
是一回事,这并不酷!每当用户使用前者时,我宁愿将用户301重定向到后者。A.com/etc
重定向到A.com/A/etc/
总的来说,我不希望访问者看到网址中的/A/
(或/B/
)。任何htaccess解决方案都是受欢迎的。
答案 0 :(得分:1)
按照相同的顺序将此内容添加到.htaccess
:
Options +FollowSymLinks -MultiViews -Indexes
RewriteEngine on
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteRule ^(A|B)(?:/(.*))?$ http://%{HTTP_HOST}/$2 [NC,L,R=301]
#/public_html/.htaccess
# A.com or B.com
RewriteCond %{HTTP_HOST} ^(A|B).com$ [NC]
RewriteRule (.*) %1/$1 [L]
如果您不想像A
那样访问A
,请将A.com/B/
重定向到B
。或者如果您不想像B
那样访问B.com/A/
,请将404
重定向到RewriteCond %{HTTP_HOST} ^A.com$ [NC]
RewriteCond %{REQUEST_URI} ^/B(?:/(.*))? [NC]
RewriteRule ^ - [L,R=404]
RewriteCond %{HTTP_HOST} ^B.com$ [NC]
RewriteCond %{REQUEST_URI} ^/A(?:/(.*))? [NC]
RewriteRule ^ - [L,R=404]
。您可以抛出RewriteRule ^ - [L]
错误。
RewriteRule ^(A|B)(?:/(.*...
在{{1}}之后{{1}}之后添加以上行。
答案 1 :(得分:1)
您可以使用此代码:
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /
# for external redirection of A.com/A/foo to A.com/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/*(A|B)(?:/(.*)|)\s [NC]
RewriteRule ^ http://%1.com/%2 [R=301,L,NC]
# for internal redirection of A.com/foo to A.com/A/foo
RewriteCond %{HTTP_HOST} ^(A|B)\.com$ [NC]
RewriteRule (?!^(A|B)(?:/(.*)|)$)^.*$ %1%{REQUEST_URI} [L]