htaccess如何将两台主机重定向到子目录

时间:2012-03-07 17:42:20

标签: apache mod-rewrite

localhost和远程主机如何将root重定向到子目录?

本地主机:domain.localhost
远程主机:domain.com
子目录:subdir

domain.localhost -> domain.localhost/subdir/<br>
domain.localhost/ -> domain.localhost/subdir/<br>
domain.com-> domain.com/subdir/<br>
www.domain.com -> www.domain.com/subdir/<br>

Options +FollowSymLinks
DirectoryIndex questions.php
RewriteEngine on

RewriteCond %{HTTP_HOST} ^domain\.localhost$
RewriteRule ^(.*)$ http://domain\.localhost/subdir/$1 [R=301,L]

RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.domain.com/subdir/ [R=301,L]

3 个答案:

答案 0 :(得分:1)

对于这些原则:

domain.localhost -> domain.localhost/subdir/
domain.localhost/ -> domain.localhost/subdir/
domain.com-> domain.com/subdir/

www.domain.com -> www.domain.com/subdir/

以下是精确的重写:

Options +FollowSymLinks
DirectoryIndex questions.php
RewriteEngine on

# domain.localhost -> domain.localhost/subdir/
RewriteCond %{HTTP_HOST} ^domain\.localhost$
RewriteRule (.*) /subdir/$1 [QSA,L]

# domain.com -> domain.com/subdir/
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$
RewriteRule (.*) /subdir/$1 [QSA,L]

如果不起作用请尝试不使用“/”:

Options +FollowSymLinks
DirectoryIndex questions.php
RewriteEngine on

# domain.localhost -> domain.localhost/subdir/
RewriteCond %{HTTP_HOST} ^domain\.localhost$
RewriteRule (.*) /subdir$1 [QSA,L]

# domain.com -> domain.com/subdir/
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$
RewriteRule (.*) /subdir$1 [QSA,L]

注意:没有必要使用[R]指令进行重定向。没有必要精确整个领域。

答案 1 :(得分:0)

无需在重写规则中指定域名:

RewriteCond $0 !^subdir
RewriteRule (.*) /subdir/$1 [L]

(请记住先清除浏览器的缓存)

答案 2 :(得分:0)

如果您没有指定完整的URL,则Mod Rewrite将使其相对于请求的域。换句话说,RewriteRule ^(.*)$ /subdir$1 [R=301,L]会将http://domain.localhost/blah-blah重定向到http://domain.localhost/subdir/blah-blah

您的配置可以压缩成一个RewriteRule:

Options +FollowSymLinks
DirectoryIndex questions.php
RewriteEngine on

RewriteCond %{REQUEST_URI} !^/subdir
RewriteRule ^(.*)$ /subdir$1 [R=301,L]

由于RewriteRule模式匹配将包含初始/,即/ blah-blah,重写/subdir$1将阻止重定向导致双斜杠。