.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(如果它不存在)。

【讨论】:

无论httphttps 都应该有效。确保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的主要内容,如果未能解决你的问题,请参考以下文章

Htaccess 规则将域重定向到 index.html

使用.htaccess将域重定向到子文件夹

需要将域重定向到另一个域而不影响电子邮件

将域重定向到另一个域并将重定向的域附加为查询字符串

htaccess 多个域重定向到 https://www 和特定文档根目录

如何使用 htaccess 将多个域重定向到除 1 个目录之外的另一个域?