APACHE SSL WWW перенаправление на настоящее имя - PullRequest
0 голосов
/ 30 августа 2018

В файле .htaccess:

# Enable mod_rewrite
RewriteEngine on

# Rewrite file name
RewriteRule ^dome.htm$ dome.php [L,QSA]


# Force www
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Force SSL
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

Принудительный SSL & WWW работает хорошо, за исключением того, что перезаписывает имя файла, где запрос, сделанный с URL ниже, возвращает реальное имя файла, которое https://www.example.com/dome.php:

example.com/dome.htm
www.example.com/dome.htm
https://example.com/home.htm

Как сохранить https://www.example.com/dome.htm при доступе выше URL.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вам необходимо изменить порядок обработки:

# Enable mod_rewrite
RewriteEngine on

# Force www
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Force SSL
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

# Rewrite file name
RewriteRule ^dome\.htm$ dome.php [L,QSA]

Также обратите внимание на слегка измененное регулярное выражение в этом RewriteRule; -)

Почему это имеет значение? Представьте, что входящий запрос переписывается ... По вашему порядку правил запрос сначала переписывается на /dome.php, , затем перенаправляется на https://%{HTTP_HOST}%{REQUEST_URI}, что дает указание браузеру загрузить /dome.php с этого нового URL ... RewriteRules обрабатываются сверху вниз. Конечно, вы указали флаг [L], однако это только завершает перезапись _ для этой итерации! Если последняя итерация изменила запрос (была выполнена перезапись), то http 101-сервер выполняет другую итерацию .

Альтернативой было бы оставить ваш порядок правил, но использовать флаг [END] вместо [L], который делает то, что вы хотите. Но он поддерживается только в более новых версиях http-сервера apache, начиная с версии 2.4.

0 голосов
/ 30 августа 2018

Легко:

RewriteRule    ^dome.htm?$    dome.php [NC,L]    # Handle requests for "dome"
...