301 перенаправления (.htaccess) - с http на https + www на не-www + 'index.php' на '/' - PullRequest
1 голос
/ 21 марта 2019

Я просмотрел много статей о перенаправлениях 301 (.htaccess), но не нашел ни одной, которая могла бы помочь во всех трех переадресациях, как я упоминал в заголовке этого вопроса (с http по https + www для не-www + 'index.php' to '/').

То, что я пробовал до сих пор (но не смог достичь желаемого результата):

.htaccess file

RewriteEngine on

#redirect http to https plus www to non-www
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
#RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule (.*) https://%1%{REQUEST_URI} [NE,L,R=301]
#redirect /index.php to /
#RewriteRule ^index\.php$ / [L,R=301]

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 year"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>

<IfModule mod_headers.c>
  <FilesMatch "\.(js|css|xml|gz)$">
    Header append Vary: Accept-Encoding
  </FilesMatch>
</IfModule>

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

Это прекрасно работает, только когда дело доходит от http до https, но все три перенаправления не работают одновременно. Если я пробую разные решения, я получаю Error Too many redirects

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Вы можете использовать следующий htaccess

RewriteEngine on

#redirect http to https plus www to non-www
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule (.*) https://%1%{REQUEST_URI} [NE,L,R=301]
#redirect /index.php to /
RewriteRule ^index\.php$ / [L,R=301]

Редактировать:

Если вы используете cloudflare, вам нужно заменить переменную %{HTTPS} на переменную проверки схемы Cloudflare %{HTTP:CF-Visitor}.

Заменить эту строку

RewriteCond %{HTTPS} off [OR]

с

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]

Обязательно очистите кеш браузера перед проверкой этого изменения.

0 голосов
/ 21 марта 2019

Попробуйте это:

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^www\. [NC,OR]
RewriteCond %{HTTPS} !=on
RewriteRule ^  https://example.com%{REQUEST_URI} [L,R=301]
RewriteRule ^index\.php / [R=301,L]

Приведенные выше правила будут соответствовать https://www и http://www и всем http:// и приводить их к https://without-wwww, а также будут игнорировать только https://without-www.

последняя строка удалит index в URI.

Примечание: очистить кеш браузера при тестировании

...