htaccess rewriterule, всего 8 RewriteRules, отлично работают отдельно, но не все вместе
Ниже представлен весь файл htaccess.
Должен (и прекрасно работает для всего, кроме папки администратора):
- добавить www. на набранный URL (но не для папки администрирования, просто оставьте его),
- скрыть index.php от набранного URL (но не для папки администрирования, просто оставьте его),
- замените http на https или https на http в зависимости от введенного URL-адреса (но не для папки администрирования, поскольку папка администрирования всегда должна быть https)
К сожалению, с файлом.htaccess ниже, both http:// (and https://) www.mydomain.com/administartion/index.php
перейдите на страницу ошибки 404. Как исправить?
Итак, #block0, #block1, #block2 в.htaccess работают нормально, они делают свою работу (URL-адреса папки администрирования всегда https, перенаправлений на страницу 404 нет)
Кроме того, #block0, #block3 - #block8 делают свою работу (отлично работает для любых URL, которые не относятся к папке администратора)
Но, как только я собрал их все (добавьте # block3 - # block8 сразу после #block0-#block2), тогда http://www.mydomain.com/administartion/index.php
начинает переходить на страницу 404.
В чем причина и как исправить? Спасибо.
#block0
RewriteEngine On
#block1
#special rules for administration folder, http to https, if http
RewriteCond %{REQUEST_URI} ^/administration
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R,L=301]
#block2
RewriteCond %{REQUEST_URI} ^/administration
RewriteRule ^administration - [NC,L]
#URLs to administration folder should be stopped before this line.
#block3
RewriteCond %{HTTP_HOST} !^www.mydomain.com$
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]
#block4
RewriteCond %{REQUEST_METHOD} !POST
RewriteRule ^index.php / [L,R=301]
#block5
#if its a resource (add others that are missing)
RewriteCond %{REQUEST_URI} \.(gif|css|png|js|jpe?g)$ [NC]
#do nothing
RewriteRule ^ - [L]
#block6
#determine if page is supposed to be http
RewriteCond %{QUERY_STRING} (^|&)(p=home1?|qqq=home)(&|$) [NC,OR]
#or if query string is empty
RewriteCond %{QUERY_STRING} ^$
#set env var to 1
RewriteRule ^ - [E=IS_HTTP:1]
#block7
#all pages that are supposed to be http redirected if https
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{HTTPS} on
RewriteCond %{ENV:IS_HTTP} 1
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [R,L=301]
#block8
#all other pages are sent to https if not already so
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{HTTPS} off
RewriteCond %{ENV:IS_HTTP} !1
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R,L=301]
1 ответ
Менять [R,L=301]
должно быть [R=301,L]
в #block1
#block7
#block8
Также установите сертификат для https
а у тебя есть VirtualHost *:443
в вашем .conf
апача?