htaccess删除具有多个域的index.php

时间:2019-03-07 09:57:29

标签: .htaccess codeigniter codeigniter-htaccess

这似乎很基本,关于.htaccess的在线问题很多,但是经过两天的研究,我仍然无法按照自己的方式进行我的工作。

我想要的是:

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

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

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

  4. 删除网址的“ 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仍然显示在地址栏中。 如何删除它?

1 个答案:

答案 0 :(得分:0)

好吧,我(部分)放弃了.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());
    }

 }