使用.htaccess进行域管理

时间:2012-02-16 07:38:29

标签: .htaccess

假设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]

我遇到两个问题:

  1. A.com/A/index.phpA.com/index.php是一回事,这并不酷!每当用户使用前者时,我宁愿将用户301重定向到后者。
  2. A.com/etc重定向到A.com/A/etc/
  3. 总的来说,我不希望访问者看到网址中的/A/(或/B/)。任何htaccess解决方案都是受欢迎的。

2 个答案:

答案 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]