为什么子域重写不起作用?

时间:2009-10-13 04:52:53

标签: mod-rewrite

我希望我的子域直接指向一个文件夹。 我找到了以下mod_rewrite脚本来设置此行为。 不幸的是它不起作用。

当我导航到fish.example.com时,浏览器显示404错误,并显示以下消息。 “在此服务器上找不到请求的URL。”

你知道为什么吗? 我怎样才能使它发挥作用?

    # Internally rewrite <subdomain>.example.com/<URLpath> to example.com/subs/<subdomain/<URLpath>
RewriteEngine on

RewriteCond $1 !^fish/
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com
RewriteRule (.*) /fish/%1/$1 [L]

更新

我已将脚本更改为以下内容,但在这种情况下,浏览器会重定向到example.com而不是example.com/fish 你知道为什么吗?

RewriteCond $1 !^fish/
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com
RewriteRule ^fish/(.*) /fish/%1/$1 [L]

2 个答案:

答案 0 :(得分:0)

试试这个:

RewriteEngine On

重写基础/#确保它从域

开始

RewriteCond%{HTTP_HOST} ^ fish.example.com [NC]#抓住你的子域名

RewriteRule(。*)$ fish / $ 1 [L] #Reroute to folder。

答案 1 :(得分:0)

更新

我明白了......试试这个:

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

基本上301重定向...%1匹配上一个RewriteCond中的子域名,$ 1匹配原始URL