问题描述
我需要使用 .htaccess 将子域重写为子目录,但将子域保留在 url 中,如下所示:
I need to rewrite a subdomain to a subdirectory using .htaccess but keep the subdomain in the url like this:
浏览器中访问的 url:sub1.domain.com
Visited url in browser: 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 是否有任何解决方案?
but this leads to an endless loop. I know that it would be easier to do this by php but is there any solution for this with using .htaccess?
推荐答案
您可以在文档根目录中使用此规则:
You can use this rule in document root:
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/
- NC: Ignore case
- L: Last rule
- RewriteCond %{HTTP_HOST} line makes sure that rule only executes for subdomain
- (?!sub1/) is negative lookahead expression that means of request is not starting with /sub1/
- RewriteRule ^((?!sub1/).*)$ /sub1/$1 [L,NC] rewrites current path to /sub1/<uri>
- Apache mod_rewrite 介绍
- Apache mod_rewrite 技术细节
沫沫小公举