.htaccess域目录无法正确解析domain.com/domain

时间:2013-07-13 22:58:35

标签: apache .htaccess

我有两个指向相同IP foo.combar.com

的域名

我无权为域设置虚拟主机,但我已设法创建.htaccess规则,因此设置如此。

  • foo.com指向/目录
  • bar.com指向/ bar目录

现在进行上面的设置我可以使用不同的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]

1 个答案:

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