【问题标题】:How to rewrite subdomain and subsubdomain into a parameter?如何将子域和子子域重写为参数?
【发布时间】:2017-07-04 22:24:19
【问题描述】:

有人可以帮忙改写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

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

【问题讨论】:

    标签: apache mod-rewrite subdomain


    【解决方案1】:

    这将重写您的子域:

    RewriteEngine on
    RewriteCond %{QUERY_STRING} !^sub=
    RewriteCond %{HTTP_HOST} ^(?!www\.)(.+)\.domain\.com$
    RewriteRule ^(/?)$ $1?sub=%1
    

    根据需要替换域。确保每个 . 前面都有一个斜杠,就像现在一样。

    它只适用于索引页面。如果您希望它在domain.com/ 之后有任何事情时工作,请告诉我。

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

    RewriteCond %{HTTP_HOST} =domain.com
    RewriteRule ^ http://www.domain.com%{REQUEST_URI} [R=301,L]
    

    在那个点之前不需要斜线。

    如果其中任何一项对您不利,请告诉我。


    基于cmets的原创海报后记:

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

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

    【讨论】:

    • 谢谢。我在底部添加了 directoryIndex index.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 是保留的。因此,我尝试了一个 A 记录到为 ftp A 记录和其他显示的相同 IP。我的网站现在在 subA.subB.domain.com 加载其页面 - 必须在代码中进行测试...
    • 可能需要一个新问题。但是,是的,这是您需要的 *.domain.com 的 A 记录,然后服务器需要愿意为该站点提供服务,听起来就是这样。所以看起来不错。让我知道任何问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2016-01-30
    • 2020-02-03
    • 2015-02-22
    相关资源
    最近更新 更多