2016-10-12 7 views
0

В настоящее время мы имеем это правило в .htaccess.htaccess HTTPS к HTTP перенаправление конфликта с существующим правилом

RewriteEngine on <br> 
RewriteCond %{REQUEST_URI} !^/site/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /site/$1 
RewriteRule ^(/)?$ site/index [L] 

Что это делает для любого визита мы будем перенаправлять на место вызова вложенной папки, если страница не найдены. И когда это произойдет, URL-адрес не будет отображаться как подпапка.
Пример, если у нас есть /rootFolder/site/temp.html это будет отображаться в URL, как

http://www.domain.com/temp.html

Это работает хорошо, но теперь нам нужно добавить HTTPS перенаправление, если пользователь посещении сайта.

Это новое правило, которое я придумал

RewriteEngine on 
RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} !^/site/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/site/$1 
RewriteRule ^(/)?$ https://%{HTTP_HOST}/site/index [L] 

Но проблема с этим один теперь URL будет отображаться сайт вложенную https://www.domain.com/site/temp.html

Как можно достичь, так что если пользователь делает

http://www.domain.com/temp.html найдет temp.html в подпапке сайта и перенаправляет на https, а URL будет показывать только

https://www.domain.com/temp.html

Благодаря

ответ

1

Как насчет если вы делаете это в два прохода, всегда перенаправляет все, что было предложено HTTPS, а затем продолжить свои правила перезаписи, например, так:

RewriteCond %{HTTPS} off 
#301 flag redirects instead of rewriting 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

#leaving your original rules as is 
RewriteCond %{REQUEST_URI} !^/site/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /site/$1 
RewriteRule ^(/)?$ site/index [L] 
+0

это было первое, что я попробовал, и он не работает. Странно, что это работает на моем mac, но не работает с apache на AWS. Вот правило RewriteEngine на RewriteCond% {HTTPS} выкл RewriteRule^$ HTTPS (*.): //% {HTTP_HOST}% {REQUEST_URI} [L, R = 301] RewriteCond% {REQUEST_URI} ^/сайт/ RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule^(. *) $/сайт/$ 1 RewriteRule^(/)? $ сайт/индекс [L] – user332951

+0

Когда ты говорят, что это не работает, что происходит точно? – Vrac

+0

в соответствии с трассировкой сети на chrome он запускает 301 https перенаправление, но второй блок не вызывает вызов. Таким образом, https не отвечает (слишком долго реагировать) – user332951