使用htaccess将子目录重定向到子域名

6
我相对来说使用.htaccess比较新,并且除了网上阅读的内容之外,我从未编写过任何代码。我正在使用Bluehost,并希望将我的博客子目录重定向到子域名。例如:我想将www.example.com/blog重定向到blog.example.com。
我已经在根目录中放置了代码,始终将www添加到我的博客地址开头,但我不知道如何通过在.htaccess中使用代码来实现上述重定向。如果您能提供任何帮助,我将不胜感激!

你是在博客地址前面添加了“www”吗?这样它就变成了“http://www.blog.example.com/”? - Jon Lin
不,它只会在地址以“example.com”开头时添加“www.”。 - user1670009
5个回答

7
许多网络主机现在在其管理面板中提供了子域名创建的简单实现。您只需要前往那里,选择您的子域名名称,然后将其指向您树中的某个目录即可。
如果您无法这样做,那么就会变得有些复杂(您需要将该子域名解析到您的服务器IP,配置一些虚拟主机等),并且您可能没有足够的权限来执行此操作(除非您在专用服务器上)。
编辑2:
要将对www.example.com/blog的请求重定向到blog.example.com,请尝试以下步骤:
RewriteEngine on

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^blog/(.*)$ http://blog.example.com/$1 [L,QSA,R=301]

RewriteCond %{HTTP_HOST} ^blog\.example\.com$
RewriteCond %{REQUEST_URI} !^blog/
RewriteRule ^(.*)$ /blog/$1 [L,QSA]

我已经创建/设置了子域,并且在blog.example.com上运行正常。我只想知道如何使用htaccess代码将当前仅显示我的主页的www.example.com/blog重定向到blog.example.com。 - user1670009
那段代码应该放在你的主页目录下,而不是博客目录下。它不是用于将www.example.com/blog重定向到blog.example.com,而是用于将blog.example.com中的请求重定向到博客目录下。(请参见我的编辑后的答案) - Oussama Jilal
我不明白为什么要使用 RewriteRule ^(.*)$ /blog/$1。这似乎是将流量发送回子目录的操作。 - User

2

我想要添上自己的观点,

1)回答上面的问题,这个重写应该可以解决:

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.
RewriteRule ^/blog$ http://blog.example.com [R=302,L]

2) 但是,我认为这本身还不够,您还需要更改DNS,以便将blog.example.com指向正确的服务器,可以通过类似于这样的CNAME来完成:

blog.example.com  CNAME example.com TTL 1080

(这并不完全是它的外观,但使用您的DNS Web界面来设置它)。


1
为什么会使用302? - John R Perry
2
翻译:只是暂时猜测的话,使用301可能更好。 - Sverre

1
你尝试过这个吗?
RewriteEngine on
RewriteBase /
RewriteRule ^/blog/(.*)$ http://blog.subdomain.com/$1 [R=301,L]

0

RewriteCond %{HTTP_HOST} ^check.domain.info$

RewriteCond %{REQUEST_URI} !^/check/

RewriteRule (.*) /check/$1

重写条件 %{HTTP_HOST} ^check.domain.info$

重写条件 %{REQUEST_URI} !^/check/

重写规则 (.*) /check/$1


-1

为了将子域名1、子域名2和目录3重定向到一个带有HTTPS://的目录,我使用以下代码:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^subdomain1.example.com [OR]
RewriteCond %{HTTP_HOST} ^subdomain2.example.com [OR]
RewriteCond %{HTTP_HOST} ^example\.com/subdomain3 [NC]
RewriteRule ^(.*)$ https://example.com/subdirectory/$1 [R=301,L]

这与OP所要求的相反。 - anastymous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接