2016-02-13 42 views
0

我使用一个网络服务器托管两个不同的网站,每个网站都有自己的域,并位于它自己的服务器子目录中。这两个域指向我的服务器的根目录。
这是我的文件结构:mod_rewrite:隐藏PHP重定向后的子目录

根/
       域1/
       域2/

在我的根目录下我使用一个小PHP脚本来确定哪个网址是进入并转发到相应的子目录。

if (($_SERVER['SERVER_NAME'] == "www.domain1.com" || $_SERVER['SERVER_NAME'] == "domain1.com")) { 
    Header("HTTP/1.1 301 Moved Permanently"); 
    header("location: http://www.domain1.com/domain1"); 
} 

else if (($_SERVER['SERVER_NAME'] == "www.domain2.com" || $_SERVER['SERVER_NAME'] == "domain2.com")) { 
    Header("HTTP/1.1 301 Moved Permanently");  
    header("location: http://www.domain2.com/domain2"); 
} 

到此为止工作完全正常。当我打电话给ww.domain1.com时,我会将其转发到相应的子目录并将域更改为www.domain1.com/domain1。这是我的问题出现的地方:如何隐藏URL中的子目录?我一直在为这个问题苦苦挣扎,阅读mod_rewrite的指南并搜索它,但没有获得成功。
我已经测试了我的RewriteEngine的服务器,这工作正常,我只是不能得到所需的行为。

编辑:
这是我的htaccess代码,位于子目录domain1。相同的代码位于directory2,更改为命名约定。

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^(www\.)?domain1.com$ 
RewriteRule !^domain1/ domain1%{REQUEST_URI} [L] 

我从这样的想法此:SO Article

在此先感谢;)

+0

_“这两个域名指向我的服务器的根目录下的” _ - 为什么?处理这个问题的_proper_方法是设置两个VirtualHost,它们将它们指向_correct_各自的目录。 – CBroe

+1

这不是我自己的服务器,它只是一个我租用的网络空间,有很多未使用的资源。为了节省一些费用,我决定将这两个网站托管在同一个网站空间中。 – turboLoop

回答

0

您可以使用Apache条件htaccess的这一点。创建文件的.htaccess与下面的代码

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(.*)\.domain1\.com 
RewriteRule ^(.*)$ /domain1/$1 [L,NC,QSA] 

RewriteCond %{HTTP_HOST} ^(.*)\.domain2\.com 
RewriteRule ^(.*)$ /domain2/$1 [L,NC,QSA] 

这将通过所有PARAMS过,除了默默重定向到子目录。你的浏览器URL不会显示重定向。

+0

感谢您的回答,在实施您的建议后,我收到“文件未找到”错误。任何想法可能来自哪里? – turboLoop

0

您可以使用根/ .htaccess中的以下代码:

RewriteEngine on 

#--Rewrite domain1 to /domain1 folder--# 
RewriteCond %{HTTP_HOST} ^(www\.)?domain1.com$ 
RewriteRule ^((?!domain1).*)$ /domain1/$1 [NC,L] 
#--Rewrite domain2 to /domain2 folder--# 
RewriteCond %{HTTP_HOST} ^(www\.)?domain2.com$ 
RewriteRule ^((?!domain2).*)$ /domain2/$1 [NC,L] 
+0

感谢您的回答,在实施您的建议后,我收到“文件未找到”错误。任何想法可能来自哪里? – turboLoop

+0

哪个网址返回“文件未找到”错误? – starkeen

+0

不幸的是他们两个。有没有一种方法可以调试.htaccess文件? – turboLoop