我的情况是,我需要强制我网站中的每个网页重定向到HTTP,但需要强制重定向到HTTPS的两个特定网址除外。
需要重定向到HTTPS页面的两个页面是:
/微软-MOC-点播视频培训/ MOC-注册页/
/课程/注册/
我在.htaccess文件中使用的代码如下所示:
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/courses/register/
RewriteCond %{REQUEST_URI} !^/microsoft-moc-on-demand-video-training/moc-registration-page/
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(/courses/register/|/microsoft-moc-on-demand-video-training/moc-registration-page/)/ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
不幸的是,这似乎并没有起作用。整个站点确实重定向到HTTP(因此部分代码可以正常工作),但是这两个异常(应该重定向到HTTPS)不会这样做,它们仍然是HTTP链接。
知道我在这里做错了吗?
答案 0 :(得分:2)
问题在于RewriteRule
,请求的路径中没有初始/
。因此,您要尝试匹配不存在的内容。
第一个捕获组中每个选项的末尾还有一个额外的/
,当与最终/
结合使用时,需要/courses/register//
这样的路径。
以下代码应符合您的需求:
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/courses/register/
RewriteCond %{REQUEST_URI} !^/microsoft-moc-on-demand-video-training/moc-registration-page/
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(courses/register|microsoft-moc-on-demand-video-training/moc-registration-page)/ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]