【问题标题】:codeigniter redirect non-www to wwwcodeigniter 将非 www 重定向到 www
【发布时间】:2011-12-01 18:34:10
【问题描述】:

我看到了.htaccess Redirect non-WWW to WWW preserving URI string,但它对我不起作用

如果我转到 mysite.com/site/something,我会被重定向到 mysite.com/something

RewriteCond %{HTTP_HOST} !^www\.mysite\.com$
RewriteRule (.*) http://www.mysite.com/$1 [R=301,L]

也试过了:

RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www.mysite.com [NC]
RewriteRule (.*) http://www.mysite.com/$1 [R=301,L]

编辑:

这是我使用的代码,基于 Alfonso Rubalcava 的回答:

if (substr($_SERVER['SERVER_NAME'], 0, 3) != 'www')
{

    if ($_SERVER['REQUEST_URI'] == '//site/')
    {
        header('HTTP/1.1 301 Moved Permanently');
        header('Location: http://www.site.com/site/');
        exit;
    }

    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://www.site.com' . $_SERVER['REQUEST_URI']);
    exit;

}

【问题讨论】:

  • 这个//site/ 看起来像是一个格式错误的链接。您可能希望在代码中更正(在视图中?)以避免搜索引擎将其索引为这样。
  • 哦..链接不是格式错误,必须是带有 CI 路由或 htaccess 的东西才能删除 index.php..当我在浏览器上输入地址时行为是相同的
  • http://www.site.com//site/?
  • 我以为你的意思是我把链接弄错了
  • 更好地使用header("Location: http://www.".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']); 使其动态

标签: php .htaccess codeigniter


【解决方案1】:

试试,在 index.php 的开头:

if(substr($_SERVER['SERVER_NAME'],0,3)=="www"){
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: http://yourdomain.tdl/".$_SERVER['REQUEST_URI']);
}else{
    //the current contents of your file
}

编辑 我看错了你的问题,答案是:

if(substr($_SERVER['SERVER_NAME'],0,3)!="www"){
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: http://www.yourdomain.tdl/".$_SERVER['REQUEST_URI']);
}else{
    //the current contents of your file
}

【讨论】:

  • 我不能只使用htaccess吗?
  • 是的,你可以。这只是使用更熟悉且问题更少的方法的一种方法......并且每次从服务器迁移时都不需要调整。
  • 谢谢,它有效..顺便说一句,我删除了“else”语句并使用了“exit;”在 if 结束时:]
  • 哦..唯一的问题是,如果我转到“mysite.com/site”,我会被重定向到“mysite.com//site”,然后出现 404 错误..
  • yourdomain.tdl/".$_SERVER[ 中删除/ 我很高兴它有用。
【解决方案2】:

在 codeigniter 的 .htaccess 文件中包含这两行以将非 www url 重定向到 www

RewriteCond %{HTTP_HOST} !^www\.(.*)
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]

即完整的 .htaccess 文件将是这样的->

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{HTTP_HOST} !^www\.(.*)
 RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

【讨论】:

    【解决方案3】:

    使用此代码

    #Redirect to www
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
    RewriteCond %{HTTPS}s ^on(s)|
    RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

    【讨论】:

      【解决方案4】:

      我知道,这个问题已经有了一个公认的解决方案。但是如果域也有一些子域,就会出现问题。如果您的 codeigniter 也处理子域,则子域也将被重定向到 www。

      这是本案的答案。假设你的域名是 www.thedomain.com,代码应该是:

      $sna = explode(".", $_SERVER['SERVER_NAME']);
      if($sna[0]=="thedomain"){
          header("HTTP/1.1 301 Moved Permanently");
          header("Location: http://www.thedomain.com/".$_SERVER['REQUEST_URI']);
      }
      

      【讨论】:

        【解决方案5】:

        您可以在所有 codeigniter 网站中使用以下代码。

        `

        <IfModule mod_rewrite.c>
        RewriteEngine On
         RewriteCond %{HTTP_HOST} !^www\.(.*)
         RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
         RewriteCond %{REQUEST_FILENAME} !-f
         RewriteCond %{REQUEST_FILENAME} !-d
         RewriteRule ^(.*)$ index.php/$1 [L]
        </IfModule>
        

        `

        【讨论】:

          猜你喜欢
          • 2018-06-06
          • 1970-01-01
          • 1970-01-01
          • 2019-03-09
          • 2021-08-03
          • 2011-11-05
          • 2013-12-20
          • 2022-03-04
          相关资源
          最近更新 更多