【问题标题】:How to remove WWW prefix, add https and rewrite for codeigniter mod_rewrite?如何删除 WWW 前缀,添加 https 并为 codeigniter mod_rewrite 重写?
【发布时间】:2013-05-31 02:45:27
【问题描述】:

我在尝试在 Apache 中设置虚拟主机以使用 codeigniter 时感到头疼。

我想: - 删除 www(如果存在) - 重定向到 https - 重写请求头重定向到codeigniter解析

到目前为止,这是我的代码:

           RewriteEngine on
           RewriteBase /
           RewriteCond %{HTTPS} off
           RewriteRule (.*) https://abc.com%{REQUEST_URI} [L]
           RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
           RewriteRule ^ http://%1%{REQUEST_URI} [L]
           RewriteCond %{REQUEST_FILENAME} !-f
           RewriteCond %{REQUEST_FILENAME} !-d
           RewriteRule ^(.*)$ https://abc.com/index.php?q=$1 [L,QSA]

但这根本行不通;我在这里做错了什么?

【问题讨论】:

  • 只是对问题进行验证;你确定在 Apache 中启用了 mod_rewrite 吗?
  • 当然;) 新手证明。

标签: apache codeigniter mod-rewrite


【解决方案1】:

如果你把三个单独的部分一次做一个,你会发现只有一个不起作用吗?

强制 https

RewriteCond %{HTTPS} off
RewriteRule (.*) https://abc.com%{REQUEST_URI} [L]

首先,检查“关闭”是否适合您的安装。检查服务器用于 https 的端口号可能会更好

RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://abc.com/$1 [L]

强制 abc.com 而不是 www.abc.com

RewriteCond %{HTTP_HOST}  ^www\.(.+) [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L]

由于您已经在此 .htaccess 中硬编码您的域名,您可以在此处的 RewriteRule 中使用它而不是 %1。现在,如果您要转换为上面的 https,无论您是否已经在 https 中,这是否会将您送回 http?我也会使用 .而不是 ^,你真的想丢失 URL 的其余部分吗?

RewriteCond %{HTTP_HOST}  ^www\. [NC]
RewriteRule ^(.*)$ https://abc.com/$1 [L]

伪造文件或目录,翻转到固定的 URI

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ https://abc.com/index.php?q=$1 [L,QSA]

这会将任何现有的查询字符串附加到 q=原始路径/文件。没有它,我认为 q=original 将缺少旧的查询字符串。

请注意,所有这些都应生成 302 代码(等于 [R=302])。如果你想要一个 301,你必须明确地给出它 ([R=301,L])。我不确定在什么情况下 .htaccess 中的多个 R=301 会出错,因此您可能需要尝试一下。

【讨论】:

    【解决方案2】:

    也许这行得通:

    Options +FollowSymlinks -MultiViews
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} (?:www\.)?(.+)  [NC] 
    RewriteRule ^(.*) https://%1/$1     [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI}  !index\.php [NC]
    RewriteRule ^(.*) https://abc.com/index.php?q=$1 [R=301,L,QSA]
    

    【讨论】:

      猜你喜欢
      • 2017-04-22
      • 2011-01-13
      • 2013-08-01
      • 1970-01-01
      • 2020-12-26
      • 2017-07-13
      • 2014-08-24
      • 1970-01-01
      • 2010-12-10
      相关资源
      最近更新 更多