【问题标题】:htaccess to remove index.php, with multiple domainshtaccess 删除 index.php,具有多个域
【发布时间】:2019-03-08 07:59:29
【问题描述】:

这看起来很基础,网上有很多关于 .htaccess 的问题,但是经过两天的研究,我仍然无法按照我想要的方式工作。

我想要的是:

  1. 对所有请求强制使用 https

  2. 始终使用“www”版本的 url。

  3. 在多个域上工作(但不将它们全部重定向到一个主域)。我所有的域都指向同一个文件夹(因此他们将使用相同的代码库),并且在其根目录中是 .htaccess 文件。

  4. 删除 url 的“index.php”部分,使其人性化和 SEO 友好。

这是我目前所拥有的:

从 CodeIgniter 的基本 .htaccess 代码开始,如userguide 所示:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1

原来,最后一行有[L]标志,但我省略了它,所以它会继续下面的规则。 (我是否正确假设它采用之前 RewriteRule 中的 url 输出,并对其执行以下匹配?)

# for non www urls, add www and force https:
RewriteCond %{HTTP_HOST}(.*) !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R,L]

# for www urls, just force https:
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]

上面的代码正在完成我上面列表中的任务 1-3,但 index.php 仍然显示在地址栏中。 如何删除它?

【问题讨论】:

    标签: codeigniter .htaccess


    【解决方案1】:

    好吧,我(部分)放弃了 .htaccess,并以不同的方式解决了我的问题:

    我现在使用 CodeIgniter 钩子来处理强制 https,而让 htaccess 只处理强制 www 和删除 index.php

    所以我删除了最后一行 (RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]),并在我的应用程序中添加了一个 ssl 挂钩,现在一切正常。

    如果有人感兴趣,钩子函数是这样的:

    function force_ssl()
    
    {
    if ($_SERVER['HTTP_HOST']!='localhost' &&  $_SERVER['HTTP_HOST']!='10.0.2.2') 
    {
        $CI =& get_instance();
    
        $CI->config->config['base_url'] = str_replace('http://', 'https://', $CI->config->config['base_url']);
    
        if ($_SERVER['SERVER_PORT'] != 443) redirect($CI->uri->uri_string());
        }
    
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 2019-04-06
      • 1970-01-01
      • 2016-05-13
      • 2016-03-15
      • 2017-06-01
      相关资源
      最近更新 更多