Безопасный URL с помощью mod_rewrite и symfony - PullRequest
0 голосов
/ 02 мая 2011

У меня есть несколько страниц, которые должны быть защищены через mod_rewrite, и код основан на архитектуре mvc

Позвольте мне сказать, что у меня есть страница входа в систему, ее URL-адрес http://www.example.com/login она должна быть перенаправленана https://www.example.com/login

Если какой-либо URL-адрес, кроме требуемого защищенного URL-адреса, использует https, нам нужно изменить его на http, например: https://www.example.com/sitemap должен быть перенаправлен на http://www.example.com/sitemap

Яиспользуя следующий код в .htaccess

  RewriteCond %{SERVER_PORT} !^443$
  RewriteRule ^login$ https://%{HTTP_HOST}/login [R=301,L]

  RewriteCond %{SERVER_PORT} ^443$
  RewriteCond %{REQUEST_URI} !^/login$
  RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

  # we check if the .html version is here (caching)
  RewriteRule ^$ index.html [QSA]
  RewriteRule ^([^.]+)$ $1.html [QSA]
  RewriteCond %{REQUEST_FILENAME} !-f

  # no, so we redirect to our front web controller
  RewriteRule ^(.*)$ index.php [QSA,L]

Проблема, которую я получаю, заключается в том, что он зацикливается, когда говорит, что «сервер перенаправляет запрос на этот адрес способом, который никогда не завершится».

Можете ли вы помочь мне с решением, где только следующие URL-адреса защищены, а другие нет.Мне нужно решение с .htaccess, а не с любым плагином Symfony.

https://www.example.com/login

https://www.example.com/account

https://www.example.com/register

Спасибо

Низам

Ответы [ 2 ]

0 голосов
/ 04 мая 2011

Это прекрасно сработало для меня

  # SSL here
  RewriteCond %{SERVER_PORT} !^443$
  RewriteRule ^/?(login|account|register|mypage)(.*) https://%{HTTP_HOST}/$1$2 [R,L]

  # not anywhere else
  RewriteCond %{SERVER_PORT} !^80$
  RewriteCond %{REQUEST_URI} !^/?(login|account|register|mypage)(.*)
  RewriteCond %{REQUEST_URI} !^/?index\.php$
  RewriteRule .? http://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Спасибо Прем, Амар, Гарри за решение.

0 голосов
/ 02 мая 2011

Я думаю, что проблема в нежелательном слэше в регулярном выражении вашей пятой строки.Попробуйте это

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^login$ https://%{HTTP_HOST}/login [R=301,L]

RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{REQUEST_URI} !^login$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...