Apache 如何将子域和子域重写为参数?

Apache 如何将子域和子域重写为参数?,apache,mod-rewrite,subdomain,Apache,Mod Rewrite,Subdomain,有人能帮我重写一下apache吗 假设我有一个域名domain.com 我想要的是: 如果有人请求www.domain.com,则返回www.domain.com(即 index.php(在我的根目录中) 如果有人请求subA.subB.domain.com,则返回 www.domain.com?sub=subA.subB 如果有人请求sub.domain.com,则返回www.domain.com?sub=sub 如果有人请求domain.com,请返回www.domain.com 我知道这里

有人能帮我重写一下apache吗

假设我有一个域名
domain.com

我想要的是:

如果有人请求www.domain.com,则返回www.domain.com(即 index.php(在我的根目录中)

如果有人请求subA.subB.domain.com,则返回 www.domain.com?sub=subA.subB

如果有人请求sub.domain.com,则返回www.domain.com?sub=sub

如果有人请求domain.com,请返回www.domain.com


我知道这里的规则是自己动手。我有。例如,类似的问题要求重定向到/subA/subB,但即使我理解了这个答案,我也不知道如何使其适应我需要的内容,即?sub=subA.subB。多年来,我多次试图理解“重写”。好的,/sobstory-off.

这将重写您的子域:

RewriteEngine on
RewriteCond %{QUERY_STRING} !^sub=
RewriteCond %{HTTP_HOST} ^(?!www\.)(.+)\.domain\.com$
RewriteRule ^(/?)$ $1?sub=%1
根据需要替换域。确保每个
前面都有一个斜杠,就像现在一样

它只适用于索引页。如果你想让它在
domain.com/
之后运行,请告诉我

至于制作<代码>http://domain.comwork,我建议将其重定向到
www.domain.com
,这样您就不会从搜索引擎中收到重复的内容问题。这样做(将其添加到上面的下面):

在那一条上的点之前不需要斜线

如果这些对你没有好处,请告诉我


基于评论的原始海报附言:

上述解决方案对于该问题是正确的,但假定服务器上有以下配置:

  • 已添加子域*.domain.com并指向站点的文档根目录
  • 已在DNS配置中配置了*.domain.com的“A记录”,并指向服务器的IP地址

这将重写您的子域:

RewriteEngine on
RewriteCond %{QUERY_STRING} !^sub=
RewriteCond %{HTTP_HOST} ^(?!www\.)(.+)\.domain\.com$
RewriteRule ^(/?)$ $1?sub=%1
根据需要替换域。确保每个
前面都有一个斜杠,就像现在一样

它只适用于索引页。如果你想让它在
domain.com/
之后运行,请告诉我

至于制作<代码>http://domain.comwork,我建议将其重定向到
www.domain.com
,这样您就不会从搜索引擎中收到重复的内容问题。这样做(将其添加到上面的下面):

在那一条上的点之前不需要斜线

如果这些对你没有好处,请告诉我


基于评论的原始海报附言:

上述解决方案对于该问题是正确的,但假定服务器上有以下配置:

  • 已添加子域*.domain.com并指向站点的文档根目录
  • 已在DNS配置中配置了*.domain.com的“A记录”,并指向服务器的IP地址

谢谢。我在底部添加了directoryIndex.php。目前,如果我在地址栏中输入domain.com,我的主页将返回,地址栏将更新为www.domain.com。但是,如果我输入subA.subB.domain.com,我会得到“Firefox在subA.subB.domain.com上找不到服务器”。同样,只有subA.domain.com?有两件事你需要做,使这一部分的工作。首先,将您的主机设置为服务*.domain.com或您需要的特定子域,然后,如果您的主机未处理此问题,请设置DNS条目。对不起,这超出了我对配置服务器的理解。我的网站托管在Hostgator上,所以我通过CPanel访问功能。我希望动态地添加新的子域-也就是说,我只需要在网站中驻留数据。当有人要求sub1.sub2时,网站将检查是否有匹配的数据,如果有,则提供数据。我计划连续添加数据-因此无法提前知道所有子域。我将搜索cpanel以设置*.domain.com,但如果您能在这两个步骤上快速跟踪我,我将不胜感激。意识到这是一个新问题…我找到了子域的CP并添加了*.domain.com,将它指向我的文档根。重新测试后仍然无法工作。然后我找到了一些用于DNS基本配置的CP。它给了我设置A和CNAME记录的选项。我从来都不懂这些。维基百科成了我的朋友。我推断*.domain.com到domain.com之间需要一个CNAME记录,原因与ftp类似,但系统告诉我*.domain.com是保留的。因此,我尝试了一个记录到相同的IP显示的ftp A记录和其他。我的网站现在在subA.subB.domain.com加载它的页面-将不得不在代码中进行测试…可能需要一个新问题。但是是的,这是你需要的*.domain.com的一个记录,然后服务器需要愿意在这个记录上为网站服务,这听起来像是。这样看来很好。有什么问题请告诉我。谢谢。我在底部添加了directoryIndex.php。目前,如果我在地址栏中输入domain.com,我的主页将返回,地址栏将更新为www.domain.com。但是,如果我输入subA.subB.domain.com,我会得到“Firefox在subA.subB.domain.com上找不到服务器”。同样,只有subA.domain.com?有两件事你需要做,使这一部分的工作。首先,将您的主机设置为服务*.domain.com或您需要的特定子域,然后,如果您的主机未处理此问题,请设置DNS条目。对不起,这超出了我对配置服务器的理解。我的网站托管在Hostgator上,所以我通过CPanel访问功能。我希望动态地添加新的子域-也就是说,我只需要在网站中驻留数据。当有人要求sub1.sub2时,网站将检查是否有匹配的数据,如果有,则提供数据。我计划连续添加数据-因此无法提前知道所有子域。我将搜索cpanel以设置*.domain.com,但如果您能在这两个步骤上快速跟踪我,那将是一个非常好的选择