Я прочитал много статей и не могу заставить ВСЕ объединиться .htaccess Rewrites работать вместе. Я либо получаю прямые циклы, либо один или несколько не работают вообще.
Чтобы быть ясным, я ищу следующие 5, если это необходимо:
Некоторые примеры:
Вот текущая настройка .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-файлов и не добавляет конечную косую черту.
Я вижу 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]