使用mod_rewrite和symfony保护URL

时间:2011-05-02 10:04:07

标签: .htaccess symfony1 https

我有几页需要通过mod_rewrite保护,代码基于mvc架构

我告诉我有一个页面登录,其网址为http://www.example.com/login,需要将其重定向到https://www.example.com/login

如果除了所需的安全网址之外的任何网址都使用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]

我得到的问题是,它会循环显示“服务器以永远无法完成的方式重定向此地址的请求”。

你能帮我解决一下这个解决方案,其中只有以下网址是安全的,而其他网址则没有。我需要一个使用.htaccess的解决方案,而不是任何symfony插件。

https://www.example.com/login

https://www.example.com/account

https://www.example.com/register

由于

尼扎姆

2 个答案:

答案 0 :(得分:0)

我认为问题是你的第五行正则表达式中不需要的斜杠。试试这个

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]

答案 1 :(得分:0)

这对我来说很完美

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

感谢Prem,Amar,Harry的解决方案。