【问题标题】:htaccess add www if not subdomain, if subdomain remove wwwhtaccess 添加 www 如果不是子域,子域删除 www
【发布时间】:2016-05-19 00:38:05
【问题描述】:

我正在努力做到这一点 - 可能是最好的例子,所以:

domain.com -> www.domain.com
www.domain.com -> www.domain.com
subdomain.domain.com -> subdomain.domain.com
www.subdomain.domain.com -> subdomain.domain.com

因此,如果访问者在子域中,请不要添加 www,并且在设置时将其删除。否则,如果不在子域中,请添加 www。 我试图写这样的东西,但这不会从子域地址中删除 www :/ 另外,如果可能的话,我不想使用域和 TLD 域,但要使其尽可能通用。 你能帮我解决问题吗?

# add www if not subdomain
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]


# remove www if subdomain
RewriteCond %{HTTP_HOST} ^www\.([^\.]*)\.%{HTTP_HOST}+$ [NC]
RewriteRule (.*) http://%1.%{HTTP_HOST}/$1 [R=301,L]

我在根目录下的这个文件:

# htaccess rules for subdomains and aliases
# to create new subdomain, create a folder www/subdom/(subdomain name)
# to create web for alias, create a folder www/domains/(whole domain name)

# htaccess pravidla pro subdomeny a samostatne weby aliasu
# pro vytvoreni subdomeny vytvorte adresar www/subdom/(nazev subdomeny)
# pro vytvoreni webu pro alias vytvorte adresar www/domains/(cely domenovy nazev)
# dalsi info a priklady: http://kb.wedos.com/r/32/webhosting-htaccess.html

RewriteEngine On

# cele domeny (aliasy)
RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d
RewriteRule (.*) domains/%2/$1 [DPI]

# subdomeny (s nebo bez www na zacatku)
RewriteCond %{REQUEST_URI} !^subdom/
RewriteCond %{REQUEST_URI} !^/subdom/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([^\.]*)\.([^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/subdom/%2 -d
RewriteRule (.*) subdom/%2/$1 [DPI]

# aliasy - spravne presmerovani pri chybejicim /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^domains/[^/]+/(.+[^/])$ /$1/ [R]

# subdomeny - spravne presmerovani pri chybejicim /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^subdom/[^/]+/(.+[^/])$ /$1/ [R]

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    像这样:

    # add www if not subdomain
    RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    # remove www if subdomain
    RewriteCond %{HTTP_HOST} ^www\.([^.]+\.[^.]+\.[^.]+)$ [NC]
    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
    

    【讨论】:

    • 太棒了。无论如何有问题它重写我这个:www.subdom.site.com 到这个:subdom.site.com/domains/subdom.site.com 我添加了根目录中的文件,它可以让你更好地了解我的问题
    • 您的 .htaccess 没有显示这两条规则。将这两条规则保留在RewriteEngine On 行下方,并在测试之前清除浏览器缓存。
    • 天啊!我认为它永远不会起作用,因为我在这里和任何地方都尝试了大量的解决方案,但是你的代码就像一个魅力一样工作。谢谢Thank you :)
    猜你喜欢
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2016-06-16
    • 1970-01-01
    • 2015-11-06
    相关资源
    最近更新 更多