【问题标题】:Wildcard subdomain mod-rewrite通配符子域 mod-rewrite
【发布时间】:2013-10-08 05:48:04
【问题描述】:

我有一个通配符子域 *.domain.com 分配给 public_html/。

我想将目录www.domain.com/folder1/index.php?name=rock 改为rock.domain.com

另外一个,我想把www.domain.com/folder1/folder2/index.php?id=5变成5.domain.com

有没有办法做到这一点?我是 mod-rewrite 的初学者。非常感谢您的帮助。谢谢

其他信息

我需要他们两个。他们会有不同的变量。

例如,/folder1/index.php 基于状态名称(?state=statename)。

对于/folder1/folder2/index.php,它将基于唯一名称(?name=uniquename)。

所以,www.domain.com/folder1/index.php?state=statename 将是 statename.domain.com

并且 www.domain.com/folder1/folder2/index.php?name=uniquename 将是 uniquename.domain.com

谢谢

【问题讨论】:

    标签: php apache .htaccess mod-rewrite wildcard-subdomain


    【解决方案1】:

    在文档根目录的 htaccess 文件中,您可以添加特定于“rock”和“5”的规则:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} ^rock\.domain\.com$ [NC]
    RewriteRule ^$ /folder1/index.php?name=rock [L,QSA]
    
    RewriteCond %{HTTP_HOST} ^5\.domain\.com$ [NC]
    RewriteRule ^$ /folder1/folder2/index.php?name=5 [L,QSA]
    

    如果您希望它重定向到另一个方向,那么您需要:

    RewriteEngine On
    
    RewriteCond %{QUERY_STRING} ^state=(.*)$ 
    RewriteRule ^folder1/index\.php$ http://%1.domain.com/? [L,R=301]
    
    RewriteCond %{QUERY_STRING} ^name=(.*)$ 
    RewriteRule ^folder1/folder2/index\.php$ http://%1.domain.com/? [L,R=301]
    

    【讨论】:

    • 谢谢。但是如果 rock 和 5 会根据 php 结果发生变化怎么办。另一个词,它是灵活的,这个词可以是任何东西。
    • @RedzwanLatif 你应该如何区分/folder1/index.php/folder1/folder2/index.php 之间的区别?
    • 它重定向回 domain.com 而不是 uniquename.domain.com。其他答案也一样。
    【解决方案2】:

    遵循通用规则应该适合您:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} ^www\. [NC]
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+folder1/index\.php\?state=([^\s&]+) [NC]
    RewriteRule ^ http://%1.domain.com/? [R=301,L]
    
    RewriteCond %{HTTP_HOST} ^www\. [NC]
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+folder1/folder2/index\.php\?name=([^\s&]+) [NC]
    RewriteRule ^ http://%1.domain.com/? [R=301,L]
    

    【讨论】:

    • 你想要/folder1/folder2/index.php还是/folder1/index.php
    • 我两个都需要。他们会有不同的变量。例如,/folder1/index.php 基于状态名称(?state=statename)。对于/folder1/folder2/index.php,它将基于唯一名称(?name=uniquename)。因此,www.domain.com/folder1/index.php?state=statename 将是 statename.domain.com,而 www.domain.com/folder1/folder2/index.php?name=uniquename 将是 uniquename.domain.com。谢谢
    • 它重定向回 domain.com 而不是 uniquename.domain.com。其他答案也一样。
    • 您在浏览器中输入的原始 URL 是什么。是http://www.domain.com/folder1/index.php?state=rock 吗?
    猜你喜欢
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多