Apache .htaccess将所有子域重定向到一个目录,并保留url

Apache .htaccess将所有子域重定向到一个目录,并保留url,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我花了一下午的大部分时间在谷歌上搜索这一个,似乎根本无法让它工作(我对htaccess有点生疏!) 基本上我有一个站点,每个注册的用户都有一个子域(例如userA.example.com、userB.example.com) 我一直在使用php脚本来注册这些子域,但现在有了500多个(!)子域,我正在迁移到一个新的服务器,并认为我可能实现一个新的系统 我基本上希望附加到域的任何子域指向单个文件夹,并将原始url保留在浏览器的地址栏中,这样我就不必使用服务器资源为每个用户注册新的子域 我已经为此设

我花了一下午的大部分时间在谷歌上搜索这一个,似乎根本无法让它工作(我对htaccess有点生疏!)

基本上我有一个站点,每个注册的用户都有一个子域(例如userA.example.com、userB.example.com)

我一直在使用php脚本来注册这些子域,但现在有了500多个(!)子域,我正在迁移到一个新的服务器,并认为我可能实现一个新的系统

我基本上希望附加到域的任何子域指向单个文件夹,并将原始url保留在浏览器的地址栏中,这样我就不必使用服务器资源为每个用户注册新的子域

我已经为此设置了所需的通配符DNS

我正在使用以下代码执行重定向,但地址仍在更改:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.XXXX\.com$ [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.XXXX\.com$ [NC]
RewriteCond %{SERVER_PORT} =80
RewriteRule ^(.*)$ http://XXXX.com/frontend/ [L,NC]
这确实很好,但我无法找到一种方法来保留子域的原始URL


感谢您的帮助

您需要首先通过Apache配置启用
mod_proxy
,否则URL将因您在此处更改域名而更改

启用
mod_proxy
后,尝试以下规则:

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.XXXX\.com$ [NC]
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://XXXX.com/frontend/ [L,NC,P]

我认为处理任何复杂重定向的简单方法是使用PHP。在服务器配置文件或.htaccess文件中,使用
FallbackResource
指令将所有URL请求发送到单个PHP文件。在该文件中,使用
$\u SERVER['HTTP\u HOST']
获取主机名,使用
$\u SERVER['REQUEST\u URI']
获取原始URI。然后你可以用

header('Location: https://subdomain.example.com/');

重定向到您想要的任何计算URL。

应该指向
/frontend/username
/username
?@JustinIurman只是指向/frontend/php从URL的子域部分刮取用户名如果您只给出一个相对重写路径而不是绝对URL,这不是很好吗已启用mod_代理,但我似乎被定向到subdomain.xxxx.com/frontend/,但它不存在。可能我的mod_代理设置不正确您想转发到
http://xxxx.com/frontend/
仅限?您如何知道它来自哪个子域?不,对不起,假设“userA”转到userA.xxxx.com,url应保持为userA.xxxx.com,但从xxxx.com/frontend/Brilliant加载,这样就行了!唯一的问题是,对文件、图像等的任何引用都指向不存在的userA.xxxx.com/frontend,但我想我可以将所有这些更新为绝对URL,除非有其他方法可以这样做?现在有一些奇怪的行为,每个文件都以/frontend/index.html的形式返回!