无法弄清楚这个通配符子域的不幸事件

时间:2013-04-18 07:46:32

标签: php .htaccess subdomain wildcard wildcard-subdomain

我一直在努力完成这几个小时,因为某些原因它不想工作。

我想要的只是username.domain.com,在内部转到domain.com/users/username

我设置了我的dns,通配符子域指向public_html / wild文件夹,我在其中放置了一个index.html文件,似乎一切正常。

问题是当我使用这个.htaccess文件时:

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

它显示404页面未找到错误。我检查了日志,它说它仍然在/ wild文件夹中查找,但是我的脚本在public_html文件夹中是一级的。

如何解决此问题? 谢谢!

2 个答案:

答案 0 :(得分:0)

您说您已将通配符子域指向public_html/wild,这意味着当有人请求http://user.domain.com/ / 请求映射到public_html/wild时。这意味着对通配符子域的请求将永远无法映射到父目录public_html中的任何内容(这就是为什么它被称为文档 root )。

您可以做的一件事是将通配符子域的文档根目录指向与主域index.php所在的位置相同的位置。但是如果您从主域获得了不希望混入子域的内容,反之亦然,您可以尝试使用P标志,该标志使用mod_proxy并创建反向代理:

RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.domain\.com$ [NC]
RewriteRule !^index\.php($|/) http://www.domain.com/index.php/users/%2%{REQUEST_URI} [P,L]

答案 1 :(得分:0)

这是最终奏效的内容:

RewriteCond %{HTTP_HOST} ^([^.]+)\.myserver\.com$ [NC]
RewriteRule (?!^m/$)^.*$ http://myserver.com/m/sites/%1%{REQUEST_URI} [NC,L,P]