【问题标题】:Just Modified this Code to Rewrite and NOT TO REDIRECT "Wildcard" Subdomains to Domain's Query String刚刚修改此代码以重写而不是将“通配符”子域重定向到域的查询字符串
【发布时间】:2013-04-02 05:20:26
【问题描述】:
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R,NE]

RewriteCond %{HTTP_HOST} !^www\.domain\.com
RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)\.php$
RewriteCond %{HTTP_HOST} ^www\.([a-z0-9-]+)\.domain\.com
RewriteRule ^(.+) http://www.domain.com/site.php?domain=%1&file=$1 [QSA]

首先,我已将所有裸子域和域重定向到它们自己的顶级域。这就是问题所在,我尝试将所有通配符子域名重写为主域的查询字符串,但它们是重定向而不是重写。

例如 www.test.domain.com 是重定向到 www.domain.com/site.php?domain=test&file=index.php 而不是写它.

现在,如何修改此代码以使这些子域重写为主域的查询字符串?有可能的?也许它有一个预定的标志!或其他任何东西.. 还有其他改进建议吗?

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting rewrite


    【解决方案1】:

    发生这种情况是因为当规则的目标以 http://some-hostname/ 开头时,重定向是隐式的,这意味着您不需要 R 标志来重定向,它将始终重定向。

    现在,如何修改此代码以使这些子域重写为主域的查询字符串?有可能吗?

    这取决于子域和主域的文档根是否完全相同,只需删除协议+主机名,因此来自:

    RewriteRule ^(.+) http://www.example.com/site.php?domain=%1&file=$1 [QSA]
    

    收件人:

    RewriteRule ^(.+) /site.php?domain=%1&file=$1 [QSA]
    

    但前提是子域和主域都在同一个地方。否则,您将不得不使用 mod_proxy 并使用 P 标志:

    RewriteRule ^(.+) http://www.example.com/site.php?domain=%1&file=$1 [QSA,P,L]
    

    【讨论】:

    • RewriteRule ^(.+) /site.php?domain=%1&file=$1 [QSA] 只会重写同一本地主机的查询字符串。 [P] flag 是我想要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2014-05-29
    • 2012-07-08
    相关资源
    最近更新 更多