.htaccess 使用mod_rewrite和symfony保护Url

.htaccess 使用mod_rewrite和symfony保护Url,.htaccess,symfony1,https,.htaccess,Symfony1,Https,我有几个页面需要通过mod_重写来保护,代码基于mvc架构 让我说,我有一个页面登录,它的url是它需要重定向到 如果除所需安全url之外的任何url使用https,我们需要将其更改为http(例如) 必须重定向到 我正在.htaccess中使用以下代码 RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^login$ https://%{HTTP_HOST}/login [R=301,L] RewriteCond %{SERVER_POR

我有几个页面需要通过mod_重写来保护,代码基于mvc架构

让我说,我有一个页面登录,它的url是它需要重定向到

如果除所需安全url之外的任何url使用https,我们需要将其更改为http(例如) 必须重定向到

我正在.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是安全的,其他URL是不安全的。我需要一个带有.htaccess的解决方案,而不是任何symfony插件

谢谢


Nizam

我认为问题在于第五行的正则表达式中有一个不必要的斜杠。试试这个

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]

这对我来说非常有效

  # 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]
谢谢普莱姆、阿马尔和哈利的解决方案