【问题标题】:.htaccess Wildcard Subdomains.htaccess 通配符子域
【发布时间】:2013-09-11 00:15:49
【问题描述】:

我正在尝试使用 .htaccess 和通配符子域实​​现解决方案,以便

http://subdomain.example.com 映射到http://example.com/index.php/accounts/subdomain/。我的规则如下所示:

RewriteCond %{HTTP_HOST} !www.example.com [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).example.com [NC]
RewriteRule ^(.*/) /index.php [PT,L]

哪个有效,但忽略其他所有内容。当我尝试将任何内容附加到规则时,例如:

RewriteRule ^(.*/) /index.php/hello [PT,L]

我收到 500 内部服务器错误。我如何让它发挥作用?

【问题讨论】:

    标签: .htaccess


    【解决方案1】:

    您可能需要从规则中排除 index.php

    RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
    RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com$ [NC]
    RewriteRule !^index\.php($|/) index.php/accounts/%2%{REQUEST_URI} [PT,L]
    

    【讨论】:

    • 谢谢,我使用了其他东西(-f 和 -d),但这也可以,所以我将把它归档以备将来参考。
    【解决方案2】:

    这是对我用来在我自己的网站上重定向子域的代码的改编。我没有声称它是最佳实践,但它确实有效;

    RewriteCond %{HTTP_HOST} ^(.*)\.com$ [NC]
    RewriteCond %1 !^(www)\.example$ [NC]
    RewriteRule ^.*$ http://www.example.com/index.php/accounts/%1/ [R=301,L]
    

    【讨论】:

    • 这可行,但我不想重定向网站上的用户。还是谢谢你。
    • 我现在无法对其进行测试,但是将 [R=301,L] 替换为 [PT,L] 会不会同样有效?
    【解决方案3】:

    尝试将您的 RewriteRule 更改为

    RewriteRule ^/(.*)$ /index.php/accounts/%1/$1 [PT]
    

    这会将 URL 重写为包含子域和原始请求 URI 的 URL。

    编辑:也许需要

    RewriteRule ^(.*)$ /index.php/accounts/%1/$1 [PT]
    

    如 cmets 中所述。

    【讨论】:

    • 我试过了,但它似乎没有触发,即使我将 index.php 更改为其他内容。
    • 哦...也许您需要在 .htaccess 中使用模式 ^(.*)$(无斜线)。 (如果可以的话,我建议将这些指令放在主服务器配置文件中。)
    • 见下文。感谢大家的帮助!
    猜你喜欢
    • 2011-08-16
    • 2014-09-06
    • 2011-06-05
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2014-04-01
    • 1970-01-01
    相关资源
    最近更新 更多