如何用htaccess和php控制多级子域名

时间:2010-11-06 20:38:59

标签: php .htaccess

我有以下动态网址

http://foo.mydomain.com

我在.htaccess文件中有以下内容

RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.domain\.com$ [NC]
RewriteRule !^index\.php($|/) sub.php?name=%2 [PT,L]

它工作正常并显示与该foo子域相关的数据。但是当我试图访问时

http://foo.mydomain.com/anything-9.html

其中foo是通配符dns子域名,bla是我的帖子标题,9是帖子ID

我添加了

RewriteRule ^/([^/]+)-([^/]+)\.html$ post.php?name=%2&post=$1&postid=$2 [PT,L]

RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.domain\.com$ [NC]
RewriteRule !^index\.php($|/) sub.php?name=%2 [PT,L]

所以我的htaccess代码变成了

RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.domain\.com$ [NC]
RewriteRule !^index\.php($|/) sub.php?name=%2 [PT,L]
RewriteRule ^/([^/]+)-([^/]+)\.html$ post.php?name=%2&post=$1&postid=$2 [PT,L]

它仍显示其主页,即sub.php而不是post.php 我应该对我的.htaccess文件做出哪些更改?

2 个答案:

答案 0 :(得分:1)

我单独用PHP解决了这个问题。对我而言,它比Apache .htaccess脚本更容易...也更容易维护(一旦编写脚本)并具有更多功能。

我使用.htaccess将所有访问重定向到一个文件。这个使用$ _SERVER [“SERVER_NAME”]变量来检查所访问的子域,并使用$ _GET [“q”]中的变量来查看其余的。

这是.htaccess文件:

RewriteEngine on
RewriteRule ^redir.php$ redir.php [L,QSA]
RewriteRule ^(.*)$ redir.php?q=$0 [L,QSA]

第一个确保没有无限循环,第二个将所有内容重定向到文件。

然后redir文件包含所需的任何文件,而且它也很简单 - $ _SERVER [“QUERY_STRING”],$ _GET变量设置为新值,cwdir设置为更改工作目录(文件),set_include_path(包括路径)。

有效。但它有点傻:D

答案 1 :(得分:0)

这里你真的需要2个问号:post.php ?? name =%2& post = $ 1& postid = $ 2