Mod使用GET变量将子域重写为PHP

2021-12-21 00:00:00 php .htaccess mod-rewrite

我正在尝试围绕 mod 重写,但似乎无法弄清楚这一点.

I'm trying to wrap my head around mod rewrite, but can't seem to figure this out.

有什么办法可以做到以下几点吗?

Is there a way I could do the following?

用户输入:http://wildcard.mydomain.com

默默地写信给:

http://mydomain.com/index.php?username=wildcard

推荐答案

您必须在 RewriteCond 然后在 RewriteRule.额外的 RewriteCond 用于防止 www.mydomain.comindex.php 被重写

You must capture the first part of the domain in a RewriteCond and then use this in a RewriteRule. The additional RewriteConds are there to prevent www.mydomain.com and index.php being rewritten

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.
RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{HTTP_HOST} ^(.+?).mydomain.com$
RewriteRule .* /index.php?username=%1 [L]

但这只是所需功能的一小部分.此外,您必须为所有 username.mydomain.com 域名设置 DNS 条目或设置 通配符 DNS 条目 *.mydomain.com 指向您的主机.

But this is only a small part of the needed functionality. Additionally, you must setup DNS entries for all of your username.mydomain.com domain names or setup a wildcard DNS entry *.mydomain.com pointing to your host.

否则,例如,客户端会尝试联系 jcraine.mydomain.com,但找不到 DNS 条目并进行投诉.

Otherwise, the client tries to contact jcraine.mydomain.com, for example, and doesn't find a DNS entry and complains.

如果这是虚拟主机,您还必须为每个添加一个 ServerAlias你的用户名

If this is a virtual host, you must also add a ServerAlias for each of your usernames

ServerAlias jcraine.mydomain.com

或一个通配符捕获所有子域

or a wildcard catching all subdomains

ServerAlias *.mydomain.com

相关文章