将网址从http://example.com/blog/重写为http://blog.example.com/

Dyl*_*lan 4 regex apache .htaccess mod-rewrite

我应该使用什么RewriteRule(使用.htaccess/ mod_rewrite)来重定向http://example.com/blog/(有www或没有)http://blog.example.com/

我正在使用以下内容,但获得重定向循环:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/blog/ [L,R=301]

RewriteCond %{HTTP_HOST} www\.example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/blog/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)

Aln*_*tak 6

在你现有的规则中,你似乎有一些错误的方法,我认为不需要负面(即!)测试.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC]
RewriteRule ^/blog/$ http://blog.example.com/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)

不过我建议你不要使用RewriteCond指令来检查主机名,只需确保规则是正确VirtualHostwww.example.com.

<VirtualHost ...>
ServerName www.example.com
ServerAlias example.com

RewriteRule ^/blog/ http://blog.example.com/ [L,R=301]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

(nb:假设blog.example.com并且www.example.com实际上是单独的虚拟主机)