子域中的子页面

时间:2011-04-11 10:28:32

标签: .htaccess rewrite subdomain

好的,目的是为我们的成员动态创建无限数量的子域。 因此,对www.example.com/sub_index.php?user=demo的请求将转换为demo.example.com网址,而www.example.com则由index.php提供。

我已启用名称服务器和Web服务器来接受通配符请求(实际上我联系我的托管服务器来执行此操作)。

在htaccess部分,我有以下内容:

####rewrite example.com into www.example.com
RewriteCond %{HTTP_HOST} ^example.com 
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*index\.htm([#?][^\ ]*)?\ HTTP/ 
RewriteRule ^(([^/]+/)*)index\.htm$ http://www.example.com/$1 [R=301,L] 

####subdomains 
RewriteCond %{HTTP_HOST} !^www\.example.com 
RewriteCond %{HTTP_HOST} ([a-zA-Z0-9]+)\.example.com 
RewriteRule ^(.*)$ sub_index.php?user=%1 

因此,www.example.com/sub_index.php?user=demo

提供了对demo.example.com/和demo.example.com/index.php的请求。

我的问题是我无法找到让子页面在子域中工作的方法 例如:demo.example.com/somepage.php应该由www.example.com/sub_page.php?user=demo提供 而demo.example.com/otherpage.php?id=5应该由www.example.com/sub_page2.php?user=demo&id=5上传。

感谢您提出建议/提示

1 个答案:

答案 0 :(得分:0)

为了使您的重写规则易于管理,您最好的选择是转换网址,不要引入新变量。

使用你的例子,不可能使用简单的文本替换从somepage.php到sub_page.php然后从otherpage.php到sub_page2.php - 你需要为每个页面建立一个新规则,因为只有你知道关于映射。您可以更轻松地将结果网址放在源网址中的数据上。

例如,您可以设计一个方案:

demo.example.com/somepage.php?start=5

转换为

www.example.com/sub_somepage.php?user=demo&start=5

使用此方案,可以从原始脚本的名称派生目标脚本的名称。这个方案的RewriteRule看起来像:

RewriteRule ^/([A-Za-z0-9_]+\.php) /sub_$1?user=%1 [qsappend]

让重写规则正常工作可能非常棘手。在细化规则时,您可能希望将其添加到配置中:

RewriteLog "/tmp/httpd-rewrite.log"
RewriteLogLevel 5

然后,您可以检查您的规则是否正在执行您想要的操作。有关这些指令如何工作的更多信息,请参见httpd.apache.org。特别是,如果要重定向到其他主机以提供内容,则必须将新主机名添加到替换和[重定向]标记。