Secure Url with mod_rewrite and symfony

故事扮演 提交于 2019-12-11 23:48:55

问题


I have few pages which need to be secured through mod_rewrite and the code is based on mvc architecture

Let me say I have a page login its url is http://www.example.com/login it needs to be redirected to https://www.example.com/login

If any url other than desired secured url uses https we need to change it to http for example https://www.example.com/sitemap must be redirected to http://www.example.com/sitemap

I am using the following code in .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]

The problem I get is, it gets looped where it says "server is redirecting the request for this address in a way that will never complete".

Can you please help me out with the solution where only the following urls are secured and others are not. I need a solution with .htaccess and not with any symfony plugin.

https://www.example.com/login

https://www.example.com/account

https://www.example.com/register

Thanks

Nizam


回答1:


I think the problem is an unwanted slash in your fifth line's regex. Try this

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]



回答2:


This worked perfectly for me

  # 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]

Thanks Prem, Amar, Harry for the solution.



来源:https://stackoverflow.com/questions/5855830/secure-url-with-mod-rewrite-and-symfony

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!