.htaccess 将子域重写到目录并将子域保留在 url

Posted

技术标签:

【中文标题】.htaccess 将子域重写到目录并将子域保留在 url【英文标题】:.htaccess rewrite subdomain to directory and keep subdomain in url 【发布时间】:2014-04-19 03:40:52 【问题描述】:

我需要使用 .htaccess 将子域重写为子目录,但将子域保留在 url 中,如下所示:

浏览器中访问的网址:sub1.domain.com

提供的网址:sub.domain.com/sub1/

我尝试了以下

RewriteCond %HTTP_HOST ^subdomain.domain.com
RewriteRule ^(.*)$ http://subdomain.domain.com/subdomain/$1 [L,NC,QSA]

但这会导致无限循环。我知道通过 php 执行此操作会更容易,但是使用 .htaccess 有什么解决方案吗?

【问题讨论】:

【参考方案1】:

您可以在文档根目录中使用此规则:

RewriteCond %HTTP_HOST ^subdomain\.domain\.com$ [NC]
RewriteRule ^((?!sub1/).*)$ /sub1/$1 [L,NC]

说明:

NC: 忽略大小写 L:最后一条规则 RewriteCond %HTTP_HOST 行确保该规则仅对 subdomain 执行 (?!sub1/) 是否定的前瞻表达式,表示请求的方式不是以 /sub1/ 开头 RewriteRule ^((?!sub1/).*)$ /sub1/$1 [L,NC] 将当前路径重写为 /sub1/<uri>

参考资料:

Apache mod_rewrite Introduction Apache mod_rewrite Technical Details

【讨论】:

@MDeuerlein,这意味着您没有在服务器上正确设置子域。 在问题中确实是过去的 op 的咖啡,无论如何,它们只是占位符,因为 op 没有透露实际的域名(有道理)。如果您遇到问题,请考虑提出不同的问题。 终于……花了一个多小时弄清楚如何制作一个正确处理域和子域的 .htaccess。这个答案有效。显然,您需要用您的数据替换 'subdomain'、'domain' 和 'sub1'。 @bharal:我在答案中添加了解释和参考。花一些时间阅读手册并提出具体问题。 @anubhava 我真的很感激!

以上是关于.htaccess 将子域重写到目录并将子域保留在 url的主要内容,如果未能解决你的问题,请参考以下文章

子域 mod_rewrite (htaccess) 到相对目录

.htaccess 重写语言子域

htaccess 子域重写规则

子域“m”。与 WordPress 和。 htaccess(在 htaccess 中的重写规则冲突。)

.htaccess 将子域重定向到外部 URL

使用 .htaccess 重写动态子域