强制除特定网址

时间:2016-02-02 23:21:54

标签: .htaccess mod-rewrite https

我的情况是,我需要强制我网站中的每个网页重定向到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链接。

知道我在这里做错了吗?

1 个答案:

答案 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]