2015-03-19 4 views
0

У меня есть веб-сайт, где я должен использовать файл .htaccess для перенаправления всех запросов на index.php, где выполняется перенаправление. Я хочу переписать URL-адрес и в то же время использовать HTTPS. Без HTTPS он отлично работает.Переписать URL-адрес с .htaccess и HTTPS

Код от рабочего .htaccess без HTTPS. Браузер получает этот вход: alert/create

RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&id=$3 [NC,L] 

Это прекрасно работает, но без HTTPS. URL-адрес браузера будет http://localhost/mypage/alert/create,, и это то, что я хочу.

Я нашел решение, которое позволяет мне использовать HTTPS:

RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ https://%{SERVER_NAME}/mypage/index.php?controller=$1&action=$2&id=$3 [NC,L] 

Страница навигации работает как шарм, но браузер отображает URL, как это:

https://localhost/mypage/index.php?controller=alert&action=create&id= 

запросы обрабатываются следующим образом:

public function __construct($urlvalues) { 
    $this->urlvalues = $urlvalues; 
    if ($this->urlvalues['controller'] == "") { 
     $this->controller = "home"; 
    } else { 
     $this->controller = $this->urlvalues['controller']; 
    } 
    if ($this->urlvalues['action'] == "") { 
     $this->action = "index"; 
    } else { 
     $this->action = $this->urlvalues['action']; 
    } 
} 

Мне нужны некоторые подсказки. Я искал по всему миру, не решая проблемы ... Если я могу использовать .htaccess, но реализовать HTTPS по-другому, это тоже будет прекрасно. Код сервера, написанный на PHP, работающий на apache2.

ответ

0

Я бы сделал это в два этапа. Первое, что у вас уже есть. И этот:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.domain.com/$1 [R=301,L] 
+0

Веб-сайт работает, но URL отформатирован следующим образом: HTTPS: //localhost/mypage/index.php контроллер = & действие = & ID = –

+0

Вы имеете в виду, что перенаправление HTTPS работает, но не с правильным URL-адресом? – ben

+0

Вы поместили этот RewriteRule перед RewriteRule (с вашим контроллером и действием)? – ben

0

Решенный! Решение: Добавлен это в .htaccess, в таком порядке spesifically:

RewriteEngine on 

#force https 
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 


RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&id=$3 [NC,L] 
Смежные вопросы