Intereting Posts
cURL Multi Threading с PHP Сохранить HTML-таблицу как изображение Как преобразовать строку с датой и временем AM / PM в 24-часовой формат timestamp mysql Рекомендации по производительности для поиска уникальной перестановки используя кавычки без одинарных кавычек и двойные кавычки в значении $ _POST Предупреждение: mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, строка задана Сравнение объекта PHP in_array? Как проверить, находится ли точка долготы / широты в пределах диапазона координат? Предупреждение: mysql_num_rows () ожидает, что параметр 1 будет ресурсом, Guzzle 6: не более json () метод ответов Когда и почему следует использовать $ _REQUEST вместо $ _GET / $ _POST / $ _COOKIE? Почему PHP печатает знак процента, когда мой скрипт завершен? Дата вставляется как 0000-00-00 00:00:00 в mysql Переключить идентификационные номера двух строк в MySql Использование строкового пути для установки данных вложенных массивов

5 .htaccess Переопределяет: принудительно HTTPS, удаляет index.php, удаляет .php, Force www, принудительное сглаживание слэша

Я прочитал много статей и не могу заставить ВСЕ объединиться .htaccess Rewrites работать вместе. Я либо получаю прямые циклы, либо один или несколько не работают вообще.

Чтобы быть ясным, я ищу следующие 5, если это необходимо:

  • Убедитесь, что www по всем URL-адресам
  • Обеспечить HTTPS для всей версии сайта
  • Удалить index.php из url
  • Удалите все .php extension / Re-direct для url без расширения .php
  • Может быть в тандеме с предыдущим: добавить трейлинг-косую черту

Некоторые примеры:

  • example.com/index.php => https://www.example.com/
  • http://www.example.com/info/really-good-info/
  • www.example.com/about-us.php => https://www.example.com/about-us/
  • www.example.com/careers/index.php => https://www.example.com/careers/

Вот текущая настройка .htaccess:

<IfModule mod_rewrite.c> Options +SymLinksIfOwnerMatch RewriteEngine On RewriteBase / # Remove all .php extensions without interfering with .js or .css. RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)\.(?!js|css)([^.]*)$ $1\.php # Remove index from url. RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index?$1 [L,QSA] RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s(.*)/index\.php [NC] RewriteRule ^ %1 [R=301,L] # Ensure www on all URLs. RewriteCond %{HTTP_HOST} ^example.com [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] # Ensure we are using HTTPS version of the site. RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Ensure all URLs have a trailing slash. RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ https://www.example.com/$1/ [L,R=301] </IfModule> 

Вышеупомянутый .htaccess ТОЛЬКО в моей корневой папке и в настоящее время делает 3 из 5 необходимых: изменений в HTTPS, добавляет www и удаляет index.php. Он не удаляет никаких других расширений .php-файлов и не добавляет конечную косую черту.

Solutions Collecting From Web of "5 .htaccess Переопределяет: принудительно HTTPS, удаляет index.php, удаляет .php, Force www, принудительное сглаживание слэша"

Я вижу 2 вопроса:

Правила переадресации, появляющиеся после перезаписывания. Добавление .php должно происходить только после обеспечения соответствующего файла .php .

Имейте это так:

 Options +SymLinksIfOwnerMatch RewriteEngine On RewriteBase / # Ensure www on all URLs. RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,R=302] # Ensure we are using HTTPS version of the site. RewriteCond %{HTTPS} !on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302] RewriteCond %{THE_REQUEST} \s/*(.*?)/index\.php [NC] RewriteRule ^ %1/ [R=302,L] RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC] RewriteRule ^ /%1/ [R=302,L] # Ensure all URLs have a trailing slash. RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^[^.]*?[^/.]$ %{REQUEST_URI}/ [L,R=302] # Remove all .php extensions without interfering with .js or .css. RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^.]+?)/?$ $1.php [L] # Remove index from url. RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^.]+?)/?$ index.php?$1 [L,QSA] 

Перед тестированием обязательно очистите кеш браузера.

Попробуйте это, чтобы избежать цикла:

 #non-www. http to www. https RewriteCond %{ENV:HTTPS} !on RewriteCond %{HTTP_HOST} ^(www\.)?yourdomain\.com$ RewriteRule (.*) https://www.yourdomain.com/$1 [R=301,L] #non-www. https to www. https RewriteCond %{ENV:HTTPS} on RewriteCond %{HTTP_HOST} ^yourdomain\.com$ RewriteRule (.*) https://www.yourdomain.com/$1 [R=301,L] RewriteCond %{THE_REQUEST} \s/*(.*?)/index\.php [NC] RewriteRule ^ %1/ [R=302,L] RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC] RewriteRule ^ /%1/ [R=302,L] # Ensure all URLs have a trailing slash. RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^[^.]*?[^/.]$ %{REQUEST_URI}/ [L,R=302] # Remove all .php extensions without interfering with .js or .css. RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^.]+?)/?$ $1.php [L] # Remove index from url. RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^.]+?)/?$ index.php?$1 [L,QSA]