【问题标题】:Mod Rewrite - Advanced issueMod 重写 - 高级问题
【发布时间】:2011-06-17 06:06:28
【问题描述】:

我需要将一个未知的子域转换为一个变量,因此以下内容适用:

  • http://test.example.com/http://www.example.com/?domain=test

  • http://xyz.example.com/http://www.example.com/?domain=xyz

  • http://www.example.com/http://www.example.com/

  • http://www.example.com/pageA/http://www.example.com/pageA/

  • http://fish.example.com/pageB?somevar=somethinghttp://www.example.com/pageB?somevar=something&domain=fish

  • http://www.example.com/pageB?somevar=somethinghttp://www.example.com/pageB?somevar=something

  • http://fish.example.com/pageBhttp://www.example.com/pageB?domain=fish

如您所见,我需要做的就是将任何子域替换为 www,并将子域名附加为名为 domain 的 get var。

我真的迷路了。

编辑:哦,我还希望用户仍然可以在 url 中看到子域,而不是重定向。

【问题讨论】:

    标签: apache mod-rewrite subdomain wildcard-subdomain


    【解决方案1】:

    试试这个:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.example\.com$
    RewriteCond %1 !=www
    RewriteRule ^ http://www.example.com%{REQUEST_URI}?domain=%1 [QSA]
    

    【讨论】:

    • 这会保留其他获取变量吗?例如?var=test&domain=xx
    • @DwayneBull:是的,QSA 标志会自动将原始请求的查询附加到新的查询。
    • 我添加了 [P,QSA] 并将第一行更改为: RewriteCond %{HTTP_HOST} !^www\.example\.com$ 然后它运行完美。谢谢。
    • @DwayneBull:哦,它应该看起来像现在这样。
    【解决方案2】:

    我会使用:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} !=www.example.com
    RewriteCond %{HTTP_HOST} ^(www\.|)(.+)\.example\.com$
    RewriteRule ^.*$ http://www.example.com/$1?domain=%2 [QSA]
    

    这也会将www.fish.example.com 重写为...?domain=fish

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多