如何使用.htaccess将子域重定向到subdir而不更改URL
有一个域/子域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
消失...
任何帮助吗?
RewriteRule ^(/)?$ wwwnew [L]
如果wwwnew
是物理子目录(你说,这是),那么你应该在的RewriteRule
susbtition结束(并且优选地,索引文件以及)附加一个尾随斜线。如果你不这样做,那么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]
这将确保我们没有得到一个重写循环。
非常感谢!你的规则奏效。但是...我已经把WrodPress的解决方案。你已经问过“请求wwwnew.example.com/something应该发生什么”,我想这是由WordPress生成的。所以所有的请求应该没有/wwwnew...你能帮忙吗? 说实话,我是网络管理员,并被要求准备这个子文件夹和子域。创建我们新网站的那个人问道。我没有访问Apache。这是外部托管提供商。顾问告诉我,操作htaccess是唯一的方法。 – pgrzeda
我已经更新了我的答案。 – MrWhite
如果此答案适合您,请将其标记为已接受,将其从未答复的问题队列中移除,您也可以提出您认为有用的答案。谢谢,非常感谢:) – MrWhite
“当然,我需要使用'.htaccess'” - 为什么?你没有访问服务器配置? – MrWhite