【问题标题】:URL Canonicalization (.htaccess)URL 规范化 (.htaccess)
【发布时间】:2013-07-11 12:50:40
【问题描述】:

我想使用我的 .htaccess 文件添加“www”。到所有 URL,如果没有它的请求,但我希望我可以做到这一点而不必定义域,因为我想在许多站点上使用此代码而无需编辑它。这可能吗?

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteBase /

    RewriteRule ^sitemap\.xml/?$ sitemap.php [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ index.php?filename=$1 [L,QSA]
</IfModule>

【问题讨论】:

    标签: php .htaccess url canonicalization


    【解决方案1】:
    
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
    RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
    

    【讨论】:

    • 感谢您的回复,但是有没有一种方法可以做到这一点而无需指定域?我希望在许多网站上使用此代码,并希望这样做而无需编辑代码,即使它只是我知道的一个小改动。
    • 这种方法的问题在于它需要模式匹配,这本身就很好,而且 .htaccess 主要是如何工作的。但是,如果您只是模式匹配一​​个通用的 ,那么您将如何阻止某人输入 foo.com 并获取 www.foo.com,但也输入 foo2.com,然后它会吐出 www.foo2.com。您需要对要添加 www 的域进行某种控制吗?如果你没有指定它,你只是在创建一个 url 重新路由。
    • 如果您真的想使其通用,请将条件更改为常规扩展名以匹配您的域,例如 [A-z0-9]{3,}\。{1}[A-z] {3,4}
    • [A-z] 包括ZA 之间的所有标点符号([ \ ] ^ _ 和反引号)。你的意思可能是[A-Za-z0-9]
    【解决方案2】:

    抱歉,我无法具体回答您的问题。我的建议是使用您选择的服务器端代码来执行此操作。

    在 php 中你会做类似...

    $host = !empty($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
    $url = explode(".", $host);
    if (count($url) == 2){
        //no subdomain found
        redirect("www.".$host);
    }
    

    更新:这将对 example.co.uk 之类的域名产生问题,不确定这是否是一个问题.....我仍在尝试支持您网站上的子域(因此不只是检查 www并附加)。

    【讨论】:

      【解决方案3】:

      HTML 5 Boilerplate 使用这个:

      RewriteCond %{HTTPS} !=on
      RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
      RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
      

      这将添加“www”。即使已经有一个子域。

      【讨论】:

        猜你喜欢
        • 2012-05-22
        • 1970-01-01
        • 1970-01-01
        • 2012-06-12
        • 1970-01-01
        • 2017-06-30
        • 2013-07-14
        • 2012-03-07
        相关资源
        最近更新 更多