htaccess для удаления index.php, с несколькими доменами - PullRequest
0 голосов
/ 07 марта 2019

Это кажется таким простым, и есть множество вопросов, касающихся .htaccess онлайн, но после двух дней исследований я все еще не могу заставить свою работу работать так, как я хочу.

То, что я хочу, это:

  1. Принудительно https для всех запросов

  2. Всегда используйте версию URL "www".

  3. Работа на нескольких доменах (, но не перенаправление их всех на главный домен).Все мои домены указывают на одну и ту же папку (поэтому они используют одну и ту же кодовую базу), а в корне у нее находится файл .htaccess.

  4. Удалите часть «index.php» изURL, чтобы сделать его удобным для людей и SEO.

Это то, что у меня есть:

Начните с основного кода .htaccess для CodeIgniter, как показано в userguide :

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

Первоначально в последней строке был флаг [L], но я его опустил, поэтому он будет продолжать следовать следующим правилам.(Правильно ли я предполагаю, что он берет вывод url в предыдущем RewriteRule и выполняет на нем следующие совпадения?)

# 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 голосов
/ 08 марта 2019

Ну, я (частично) отказался от .htaccess и решил свою проблему другим способом:

Сейчас я использую ловушку CodeIgniter для принудительного использования https и оставляю htaccess только для принудительного использования www и удаления index.php

Итак, я удалил последнюю строку (RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]) и добавил ssl hook в свое приложение, и все теперь работает.

Функция ловушки, если кому-то интересно, это:

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());
    }

 }
...