如何使用htaccess将现有目录重定向到子域?

时间:2014-10-03 16:30:17

标签: .htaccess mod-rewrite redirect

在我的网站中,我有一个名为as.my的目录,该目录实际上包含我网站上名为my.example.com的子域的文件。如果有人访问www.example.com/as.my,则会显示子域名。如果可能,我想要做的是将以as.my开头的任何网址重定向到子域名,并从网址中删除as.my。这可能吗?

我已经能够使用

重定向文件夹了
Redirect Permanent /as.my http://my.example.com

但是,如果有人要访问http://www.example.com/as.my/test/,那就无法正常工作。我也尝试过使用

RewriteRule ^as.my(/.*)$ http://my.example.com/$1 [L,NC,QSA,R=301]

但这也无法正常工作。有没有可用的方法可以用来完成我正在尝试的方法? URL的行为如下:

http://www.example.com/as.my/      => http://my.example.com/
http://www.example.com/as.my/test/ => http://my.example.com/test/

感谢您的帮助!

编辑:这是我的目录布局,以及每个文件中的htaccess文件。

主目录包含example.com的所有文件,以及目录as.my,其中包含子域my.example.com的所有文件。 htaccess的{​​{1}}文件如下:

example.com

ErrorDocument 400 /pg.errors.php?eC=400 ErrorDocument 401 /pg.errors.php?eC=401 ErrorDocument 403 /pg.errors.php?eC=403 ErrorDocument 404 /pg.errors.php?eC=404 ErrorDocument 500 /pg.errors.php?eC=500 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # Add WWW RewriteCond %{HTTP_HOST} !^(my|www). RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301] # Trailing Slash RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301] # URL Rewrites (There are a few like this, but they're all the same) RewriteRule ^about/$ about.php [L,NC,QSA] RewriteRule ^contact/$ contact.php [L,NC,QSA] </IfModule> <Files .htaccess> Order Allow,Deny Deny From All </Files> 目录中的htaccess文件如下:

as.my

2 个答案:

答案 0 :(得分:0)

You don't actually need mod_rewrite to do this.你正在使用Redirect Permanent。

RedirectMatch permanent ^as.my http://my.example.com/

请注意使用RedirectMatch代替Redirect。根据{{​​3}},

  

此指令等效于Redirect,但使用正则表达式,而不是简单的前缀匹配。

这意味着匹配将全局发送到整个请求URI并将所有这些重定向到子域。

答案 1 :(得分:0)

在跟踪斜杠规则后的/as.my/.htaccess中有此规则:

RewriteEngine On
RewriteBase /as.my/

RewriteCond %{HTTP_HOST} !^my\.example\.com$ [NC]
RewriteRule ^(.*)$ http://my.example.com/$1 [L,NC,NE,R=301]