Redirect asset requests to https, along with mod_rewrite for pretty URLs

I'm having trouble changing all requests to https, while using the following for pretty URLs:

RewriteEngine On
RewriteBase /
RewriteRule ^/?([-_a-zA-Z0-9]+)$ /?p=$1
RewriteRule ^/?([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)$ /?par=$1&p=$2 [L]

I've tried adding the following directly beneath the above (and removing the L directive above) but get redirect errors:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

What am I doing wrong here?

2
задан 27 September 2017 в 20:44
1 ответ
 RewriteCond% {HTTP: X-Forwarded-Proto}! Https
 

Заголовок X-Forwarded-Proto устанавливается только прокси-сервером (или вредоносным клиентом), поэтому, если вы не используете какой-либо прокси SSL, вам не следует использовать этот ( это, скорее всего, приведет к циклу перенаправления, если вы это сделаете).

Любое каноническое перенаправление (HTTP на HTTPS и / или без www на www) должно появиться перед внутренней перезаписью.

Попробуйте что-нибудь например, вместо этого:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

RewriteRule ^/?([-\w]+)$ /?p=$1 [L]
RewriteRule ^/?([-\w]+)/([-\w]+)$ /?par=$1&p=$2 [L]

Я добавил флаг L к вашей первой внутренней перезаписи.

\ w - это просто сокращенный класс символов для ] [_ a-zA-Z0-9] .

(Если это в .htaccess , то префикс /? в RewriteRule шаблон не требуется.)

Измените 302 (временное) перенаправление на 301 (постоянное), только если вы уверены, что он работает нормально, чтобы избежать проблем с кешированием во время тестирование. Перед тестированием вам нужно будет убедиться, что кеш браузера очищен.

В идеале, вы также должны канонизировать здесь www / non-www, а не полагаться на канонический метатег. Это может быть объединено с указанным выше перенаправлением HTTP на HTTPS. Например, для перенаправления на www:

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

Однако это конкретное перенаправление предполагает, что у вас нет других поддоменов.

1
ответ дан 3 December 2019 в 12:35

Теги

Похожие вопросы