.htaccess 将域重定向到子目录而不更改 URL
Posted
技术标签:
【中文标题】.htaccess 将域重定向到子目录而不更改 URL【英文标题】:.htaccess redirect domain to subdirectory without changing URL 【发布时间】:2014-01-17 19:03:33 【问题描述】:我有以下设置: -> domain1.com 是我的主域,也是文档根 -> domain2.com 是另一个注册为别名域的域(意味着它与 domain1.com 完全相同),我有多个这样的域。
当我现在想将该域重定向到某个东西时,我通常使用它来将该域重定向到其他东西(例如外部网站):
RewriteCond %HTTP_HOST ^(www\.)?domain2.com$ [NC]
RewriteRule ^(.*) http://somewiredisp.com/user/bla/$1 [L,R]
如果我为需要一个不错的论坛 url 或其他什么的人注册一个域,通常会使用此方法。像魅力一样工作 - 唯一的“问题”是浏览器中的地址栏发生变化,但我已经读过外部 URL 无法做到这一点,因为没有人抱怨过它我没问题。
但是,现在我想在地址栏中不更改 url 的情况下将一些 url 链接到子目录。
domain2.com -> domain1.com/subdir(或 domain2.com/subdir - 没关系,因为它是别名域)。
我目前的做法是
RewriteCond %HTTP_HOST ^(www\.)?domain2.com$ [NC]
RewriteRule ^(.*) http://domain1.com/subdir/ [P]
这不起作用(错误 404) - 如果我直接调用 domain1.com/subdir/ 如果明显有效。
我也尝试了几种变体
RewriteRule ^(.*) http://domain2.com/subdir/ [P]
RewriteRule ^(.*) /subdir/ [P]
RewriteRule ^(.*) http://domain1.com/subdir/index.html [P]
结果都一样。
也许这只是一个简单的错误,但我目前一无所知:/
【问题讨论】:
【参考方案1】:你可以使用这条规则:
RewriteCond %HTTP_HOST ^(www\.)?domain2\.com$ [NC]
RewriteRule !^subdir/ /subdir%REQUEST_URI [L,NC]
这将为domain2.com
的每个请求添加前缀/subdir
(如果它不存在)。
【讨论】:
无论http
或https
都应该有效。确保https
URL 也将进入相同的 htaccess
只有在有斜线时才对我有用。例如 domain.com/demo/ 但没有斜杠 domain.com/demo,我得到了 domain.com/domain.com/demo/ 有什么想法吗?
评论不是回答的好部分,但您可以在此规则之前保留尾部斜杠修复规则。
如果它可以完美地工作/重定向,除了您不希望在地址栏中的 URL 中显示“subdir”文本吗?有什么办法吗?
这条规则不做任何重定向,所以subdir
在重写后不会显示在浏览器中。【参考方案2】:
以下代码非常适合我。
RewriteEngine on
RewriteCond %HTTP_HOST ^(www.)?example.com$
RewriteCond %REQUEST_URI !^/folder_name/
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ /folder_name/$1
RewriteCond %HTTP_HOST ^(www.)?example.com$
RewriteRule ^(/)?$ folder_name/index.html [L]
【讨论】:
以上是关于.htaccess 将域重定向到子目录而不更改 URL的主要内容,如果未能解决你的问题,请参考以下文章