Mod rewrite mod_rewrite.htaccess HTTPS

Mod rewrite mod_rewrite.htaccess HTTPS,mod-rewrite,Mod Rewrite,如果有人键入以下内容,我想强制浏览器始终重定向到HTTPS: http://www.mydomain.com/user or http://www.mydomain.com/user/ 以上两个链接都应重定向到:https://www.mydomain.com/user 现在,代码的第二行到最后一行工作正常: RewriteRule ^user$ https://www.mydomain.com/user/ [R,QSA] 确实会将浏览器重定向到HTTPS,但如果http://www.myd

如果有人键入以下内容,我想强制浏览器始终重定向到HTTPS:

http://www.mydomain.com/user
or
http://www.mydomain.com/user/
以上两个链接都应重定向到:
https://www.mydomain.com/user

现在,代码的第二行到最后一行工作正常:

RewriteRule ^user$ https://www.mydomain.com/user/ [R,QSA]
确实会将浏览器重定向到HTTPS,但如果
http://www.mydomain.com/user/
输入后,它将不会重定向到HTTPS。我怎样才能做到这一点

Options +FollowSymLinks
RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} ^mydomain.com [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301]

RewriteRule ^user$ https://www.mydomain.com/user/ [R,QSA]
RewriteRule ^user/$ public/index.php?var1=x&var2=y [L,QSA]
这个怎么样

RewriteRule ^user/(.+)/?$  public/index.php?var1=x&var2=y [L,R=301]
RewriteRule ^user/?$       https://www.mydomain.com/user/ [L,QSA]
RewriteRule ^(.*)/?$       http://www.mydomain.com/$1 [L,R=301]
使用以下规则:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /

# force www domain name
RewriteCond %{HTTP_HOST} ^mydomain.com [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301]

# force HTTPS for some pages
RewriteCond %{HTTPS} =off [NC]
RewriteRule ^user/?$ https://www.mydomain.com/user/ [R=301,L]

RewriteRule ^user/$ public/index.php?var1=x&var2=y [L,QSA]
它将重定向到HTTPS:

  • 如果HTTP是当前协议(因此,如果已经在HTTPS上,则无重定向)
  • 无论是否存在尾随斜杠:
    /user
    /user/
    都将执行此任务(但如果请求
    /user/此处的某些内容
    ,则不会执行任何操作)

这样就进入了一个无限循环,浏览器停止了:(.你基本上得到了:正如我刚测试的Safari中的消息。是的,这给了我一个内部服务器错误。谢谢@LazyOne,这正是我要找的,我现在明白为什么了,因为“?”标记使它成为了一个ungreedy修饰符。