我想将我的博客保存在子文件夹中domain_com/htdocs/blog
并使用 blog.domain.com 访问它。我可以使用 apache 的 mod_rewrite 获取它:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^blog\.domain\.com
RewriteCond %{HTTP_HOST} !^/blog
RewriteRule ^(.*)$ /blog/$1 [L]
但我还想将 hxxp://domain.com/blog 重定向到 hxxp://blog.domain.com(只是因为我想向用户隐藏它)。简单的重定向如下:
RewriteCond %{HTTP_HOST} ^wojtyniak\.com$
RewriteRule %{REQUEST_URI} ^/foo
RewriteRule ^(.*)$ http://foo.wojtyniak.com [L,R=301]
导致重定向循环。有没有办法实现这种不产生循环的重定向?非常感谢!
PS. 抱歉,这些 hxxp 问题,但 serverfault 认为这些是链接,不允许我发布多个。
答案1
最理想的解决方案是将其放在虚拟主机上,并将博客文件托管在 htdocs 目录之外的某个地方。
我假设你没有权限进行这些必要的更改,但万一你有权限,这是它的文档。
答案2
是的,我知道。两年后,这里不再需要这个了。但也许有人被 Google 重定向到这里。
# Rewrite <subdomain>.example.com/<path> to example.com/<subdomain>/<path>
#
# Skip rewrite if no hostname or if subdomain is www
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
# Extract (required) subdomain (%1), and first path element (%3), discard port number if present (%2)
RewriteCond %{HTTP_HOST}<>%{REQUEST_URI} ^([^.]+)\.example\.com(:80)?<>/([^/]*) [NC]
# Rewrite only when subdomain not equal to first path element (prevents mod_rewrite recursion)
RewriteCond %1<>%3 !^(.*)<>\1$ [NC]
# Rewrite to /subdomain/path
RewriteRule ^(.*) /%1/$1 [L]
#