Php 无法解决此通配符子域灾难

Php 无法解决此通配符子域灾难,php,.htaccess,subdomain,wildcard,wildcard-subdomain,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

我已经尝试了几个小时来完成这项工作,但由于某些原因,它不想工作

我只想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文件夹中的级别更高

我如何解决这个问题?
谢谢大家!

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

您可以做的一件事是将通配符子域的文档根指向与主域相同的位置,即
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]

以下是最终奏效的方法:

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

您好,谢谢您的帮助,但是我遇到了以下错误:代理错误代理服务器从上游服务器接收到无效响应。代理服务器无法处理请求GET/users/www/users/www/users/www/users/www/users/www/users/www/users/www/users/www/users/myusername/。原因:www.domain.com的DNS查找失败此外,在尝试使用ErrorDocument处理请求时遇到502错误网关错误。此外,如果有问题,我使用的是CodeIniter,但一切都设置正确,因为domain.com/users/username工作正常。此外,我假设这个.htaccess文件属于wild文件夹,而不是public_html文件夹,因为那里也有一个,它只是删除了干净的codeigniter URL的index.php文件。@user1993382无意中忘记了第一个条件,即坏拷贝/粘贴谢谢,然而,它仍然指向domain.com/wild,而不仅仅是domain.com,我仍然得到一个404未找到错误。如果我删除uri的结尾并将域保留在最后一行,它将加载我放置在那里的域/野生文件夹索引文件。有没有一种方法可以让我从那里删除这个wild,并让它直接进入我的主url?非常感谢。