2012-08-10 62 views
1

我已经设置了通配符域本地测试上.devhtaccess的子域重写保持WWW

我试图重写以下网址:

http://location.domain.dev/ 

http://www.domain.dev/site/location 

我希望子域中的任何请求www始终转到www.domain.dev,但如果对location.domain.dev发出任何请求,我想在地址栏中保留该请求(即,我不想要p eople看到潜在的变化)

目前,我有我的.htaccess

<IfModule mod_rewrite.c> 
    Options +FollowSymLinks 
    RewriteEngine On 

    RewriteBase/

    RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.dev 
    RewriteRule ^(.*)$ http://domain.dev/site/%1 [QSA,NC] 

    # Removes index.php 
    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /index.php?/$1 [L] 
</IfModule> 

以下是这甚至可能吗?

回答

0

你非常接近。为了不重定向浏览器(导致地址栏更改),你需要摆脱重写规则的目标http://domain.dev部分:

RewriteRule ^(.*)$ /site/%1/$1 [QSA,NC] 

假设两* .domain.devWWW .domain.dev具有相同的文档根目录。如果他们是不同的,你可能必须启用的mod_proxy并添加P标志,以便请求被改为代理重定向浏览器:

RewriteRule ^(.*)$ http://domain.dev/site/%1/$1 [QSA,NC,P] 
+0

感谢乔恩,如何启用mod_proxy的?我可以通过.htaccess来做到这一点吗? 我已经添加了你的代码,但是,我似乎没有去重定向后的正确位置。 – 2012-08-10 11:53:03

+0

@HerbageOnion它通过服务器配置(LoadModule)打开,如果它尚未打开。在重定向后不去正确的地方是什么意思?尝试将'/ $ 1'添加到目标的末尾。 – 2012-08-10 11:56:56

+0

好吧,我刚刚检查了httpd.cong并启用了mod_proxy。我用你的第二条规则,现在工作。最后一个问题是,如果我访问http://www.domain.dev/(使用www),它会尝试访问http://domain.dev/location/www,我该如何停止重写? – 2012-08-10 12:09:22