2015-09-09 5 views
1

У меня есть следующий код мод переписать, что силы SSL на моем сайте:Htaccess Force SSL, если существует определенный файл

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Я должен отредактировать файл Htaccess, если я хочу, чтобы выключить или включить ее. Поэтому я думаю, что файл, например, ssl_on, хранящийся на определенном пути сервера, и если файл ssl_on существует, это правило применяется, и если файл не существует, это правило не должно применяться. Это возможно?

ответ

1

Вы можете использовать правило так:

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

-f условие гарантирует, что правило будет срабатывать только тогда, когда ssl_on файл существует в веб-корень. Также лучше использовать R=302 вместо R=301, чтобы избежать постоянного переадресации кеширования в браузере.

0

Согласно docs:

Один или несколько RewriteCond может предшествовать директива RewriteRule. Следующее правило используется только тогда, когда и текущее состояние URI соответствует его шаблону, и если эти условия выполнены.

Так происходит от этого, вы можете иметь до (или после) текущей RewriteCond линии новой RewriteCond линии:

RewriteCond <HTTPS_TOGGLE_FILE_PATH> -f 

И потому, что оба правила должны быть истинными, чтобы правило было согласованный, файл должен существовать до того, как будет выпущен заголовок 301.

Обратите внимание, что правила кеширования заголовков 301 в браузерах свернуты - многие из них кэшируют перенаправление неограниченно. Поэтому, если вы хотите, чтобы это действительно было toggleable (например, браузеры, которые получили доступ к сайту через HTTP, когда перенаправление включено, а затем доступ к сайту через HTTP, когда он отключен), тогда предпочтительным будет 302.

Смежные вопросы