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]
答案 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
将阻止重定向导致双斜杠。