2017-05-06 88 views
2

有一个域/子域example.com/www.example.com(显然它们都指向/public_html)并且放置在此目录中的网站完美地工作。我创建了子目录/public_html/wwwnew,并创建了子域wwwnew.example.com。我希望这个子域指向这个子文件夹,但我不想更改用户键入的URL(wwwnew.example.com)。当然,我需要使用.htaccess如何使用.htaccess将子域重定向到subdir而不更改URL

我现在.htaccess文件:

RewriteEngine On 

RewriteCond %{HTTP_HOST} ^(wwwnew.)?example.com$ 
RewriteRule ^(/)?$ wwwnew [L] 

RewriteBase/
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^(.*) index.php [L] 

目前,当我在wwwnew.example.com URL变化wwwnew.example.com/wwwnew类型。我想这个/wwwnew消失...

任何帮助吗?

+1

“当然,我需要使用'.htaccess'” - 为什么?你没有访问服务器配置? – MrWhite

回答

0
RewriteRule ^(/)?$ wwwnew [L] 

如果wwwnew是物理子目录(你说,这是),那么你应该在的RewriteRulesusbtition结束(并且优选地,索引文件以及)附加一个尾随斜线。如果你不这样做,那么mod_dir会为你添加斜线(为了“修复”URL),并且这样做会触发一个外部301重定向(你似乎看到了)。虽然这将是一个重定向到wwwnew.example.com/wwwnew/(带有斜线),而不是wwwnew.example.com/wwwnew,正如您在问题中所述。

RewriteCond %{HTTP_HOST} ^(wwwnew.)?example.com$ 

然而,你的条件重写两个顶点域和子域的请求。在你的描述中,你只描述从子域重写,而不是顶点域(你有另一个站点)。

所以,尽量不要使用以下:

RewriteCond %{HTTP_HOST} ^wwwnew\.example\.com 
RewriteRule ^$ wwwnew/ [L] 

有没有必要在.htaccess(/)?。尽管如此,最好是直接重写文档(即索引文档),以便处理此请求(否则mod_dir必须为您执行此操作)。例如:

RewriteRule ^$ wwwnew/index.php [L] 

您需要清除浏览器缓存,因为错误的重定向到/wwwnew已被浏览器缓存。

UPDATE:

然而,上述仅重写为裸子域请求,而没有任何URL的路径(如在问题说明)。为了改写为该子站点(如:wwwnew.example.com/<something>)任何请求子目录那么你就需要做一些事情,而不是像如下:

RewriteCond %{HTTP_HOST} ^wwwnew\.example\.com 
RewriteRule !^wwwnew/ wwwnew/index.php [L] 

这将确保我们没有得到一个重写循环。

+0

非常感谢!你的规则奏效。但是...我已经把WrodPress的解决方案。你已经问过“请求wwwnew.example.com/something应该发生什么”,我想这是由WordPress生成的。所以所有的请求应该没有/wwwnew...你能帮忙吗? 说实话,我是网络管理员,并被要求准备这个子文件夹和子域。创建我们新网站的那个人问道。我没有访问Apache。这是外部托管提供商。顾问告诉我,操作htaccess是唯一的方法。 – pgrzeda

+0

我已经更新了我的答案。 – MrWhite

+0

如果此答案适合您,请将其标记为已接受,将其从未答复的问题队列中移除,您也可以提出您认为有用的答案。谢谢,非常感谢:) – MrWhite

相关问题