mod_rewrite:PHP重定向后隐藏子目录

时间:2016-02-13 15:34:44

标签: php apache .htaccess mod-rewrite

我使用一个网络服务器来托管两个不同的网站,每个网站都有自己的域名,并位于服务器上自己的子目录中。两个域都指向我服务器的根目录 这是我的文件结构:

根/
DOMAIN1 /
域2 /

在我的根目录中,我使用一个小的PHP脚本来确定进入哪个URL,然后将其转发到相应的子目录。

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的指南并搜索SO但是没有取得成功。
我已经测试了我的服务器RewriteEngine On,它工作正常,我无法得到理想的行为。

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

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

我从SO得到了这个想法:SO Article

提前致谢;)

2 个答案:

答案 0 :(得分:0)

你可以在htaccess中使用apache条件。使用以下代码创建文件.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]

除了静默重定向到子目录之外,这也会传递所有参数。您在浏览器中的网址不会显示重定向。

答案 1 :(得分:0)

您可以在Root / .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]