0

我有 2 个域指向相同的 IPfoo.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]
4

1 回答 1

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]
于 2013-07-14T16:40:43.293 回答