我有两个指向相同IP foo.com
和bar.com
我无权为域设置虚拟主机,但我已设法创建.htaccess
规则,因此设置如此。
现在进行上面的设置我可以使用不同的index.html
文件来访问域的根目录。
这是我为bar.com
RewriteCond %{HTTP_HOST} ^(www\.)?bar\.com$
RewriteCond %{REQUEST_URI} !bar/
RewriteRule ^(.*)$ bar/$1 [L]
上述规则可以很好地运行,但是当我导航到bar.com/bar
时,它并没有给我404
,而是仍然指向我bar
目录的根目录。
所以,我创建了另一个RewriteCond
来处理这个问题。
RewriteCond %{HTTP_HOST} ^(www\.)?bar\.com$
RewriteCond %{THE_REQUEST} "(GET|POST) \/bar\/ HTTP/"
虽然RewriteCond
完美无缺。我不确定我会写什么重写规则,这样当用户访问bar.com/bar
时,它会指向/bar/bar
目录,因此会给我一个404
我尝试了下面的RewriteRule
,但它似乎无法正常工作
RewriteRule ^bar/(.*)$ bar/bar/$1 [L,QSA]
所以我暂时创建了一个重定向到主bar.com
域。
RewriteRule ^bar/(.*)$ http://bar.com/$1 [L,QSA,R=301]
更新:谢谢@anubhava
RewriteCond %{HTTP_HOST} ^(www\.)?bar\.com$
RewriteCond %{THE_REQUEST} "(GET|POST) \/bar\/(.*) HTTP/"
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^(.*)$ /bar/$1 [L]
答案 0 :(得分:1)
使用以下代码替换您的代码:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{DOCUMENT_ROOT}/$1 !-f
RewriteCond %{DOCUMENT_ROOT}/$1 !-d
RewriteCond %{HTTP_HOST} ^(www\.)?bar\.com$ [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+bar[?/\s] [NC]
RewriteRule ^(.*)$ - [L,R=404]
RewriteCond %{HTTP_HOST} ^(www\.)?bar\.com$ [NC]
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^bar(/.*|)$ /bar/bar$1 [L]
RewriteCond %{HTTP_HOST} ^(www\.)?bar\.com$ [NC]
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^(.*)$ /bar/$1 [L]