【问题标题】:htaccess - disable subdomains except wwwhtaccess - 禁用除 www 以外的子域
【发布时间】:2012-05-08 22:55:01
【问题描述】:

我想禁用除 www 之外的子域,因此这将不再起作用:subdomain.mysite.tld,但这会:www.mysite.tld

我也想从 mysite.tld 重定向到 www.mysite.tld,我知道该怎么做,但如果有 mysite.tld 就不会重定向到 www,反而会抛出一个禁止的错误...

RewriteCond %{HTTP_HOST} !mysite.tld$ [OR]
RewriteCond %{HTTP_HOST} !www.mysite.tld$
RewriteRule .* - [F]

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

【问题讨论】:

    标签: .htaccess subdomain


    【解决方案1】:

    你可以试试:

    RewriteCond %{HTTP_HOST} !^(www\.)?mysite\.tld$ [NC]
    RewriteRule ^ - [F,L]
    
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

    【讨论】:

    • 我认为这是两个选项,对吧?所以玛丽安必须选择一个。
    • @Gerben:对不起,我不明白你的评论。
    • 如果第一个 RewriteRule 匹配第二个则永远不会执行。
    • @Gerben:不,这不正确。当域名不是mysite.tldwww.mysite.tld 时执行第一条规则,如果为真则阻止该子域。在第二条规则中,它只是检查域是否不以 www. 开头,如果为真,则在 URL 中附加 www.
    • 像魅力一样工作!谢谢!
    【解决方案2】:

    重写为 www:

    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^mysite.tld[nc]
    RewriteRule ^(.*)$ http://www.mysite.tld/$1 [r=301,nc]
    

    【讨论】:

    • 不会解决子域问题。而是使用RewriteCond %{HTTP_HOST} !^www\.mysite\.tld$ [NC]
    • 是的,应该提到它不能解决子域问题...我不知道该怎么做,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-11-06
    • 2014-01-05
    • 2023-04-10
    • 2015-08-29
    • 2016-05-19
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    相关资源
    最近更新 更多