我知道有几条帖子询问完全相同的事情。我已经阅读了每一个问题,并尝试了解决方案,所以我再次问了同样的问题。也许他们是为O.Ps的代码工作的,但不幸的是,这些代码对我的代码没有作用。
我真的需要在一个名为play.php
的PHP页面上禁用HTTPS,以便可以通过直接HTTP访问该页面,或者如果通过HTTPS直接请求,则可以重定向到HTTP。
我需要将https://example.com/play/blabla
更改为http://example.com/play/blabla
,同时将网站的其余部分强制设置为HTTPS。
这是我完整的.htaccess代码:-
Header set Access-Control-Allow-Origin "*********"
ErrorDocument 404 /pagenotfound.php
ErrorDocument 403 /pagenotfound.php
Options -MultiViews
RewriteEngine on
RewriteBase /
Options +FollowSymLinks
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteRule ^search/(.*)$ viewgames.php?search=$1 [L,QSA,NC]
RewriteRule ^category/(.*)$ viewgames.php?cat=$1 [L,QSA,NC]
RewriteRule ^users/(.*)$ users.php?action=$1 [L,QSA,NC]
RewriteRule ^play/(.*)/$ play.php?gn=$1 [L,QSA,NC]
RewriteRule ^play/(.*)$ play.php?gn=$1 [L,QSA,NC]
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([a-z]+)/?$ $1.php [L,NC]
我有一个名为play.php
的脚本,该脚本使用.htaccess重写为/play/
,即如果有人请求example.com/play/foobar
,该请求将发送到example.com/play.php?gn=foobar
。
我对.htaccess非常陌生。非常感谢您的帮助。
[编辑] 我已经更新了上面的代码,以显示完整的.htaccess。希望对您有所帮助。顺便说一句,代码第一行中的星号(*)是隐藏我的实际网站地址。
答案 0 :(得分:1)
这里是完整的.htaccess,并附有我的评论:
Header set Access-Control-Allow-Origin "*********"
ErrorDocument 404 /pagenotfound.php
ErrorDocument 403 /pagenotfound.php
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /
# it is important to keep www removal rule as first rule to avoid multiple redirects
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]
# http->https if URL is not starting with /play/ or /play.php
RewriteCond %{HTTPS} !on
RewriteRule !^play(?:\.php|/.*)?$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE,NC]
# https->http if URL is starting with /play/
RewriteCond %{HTTPS} on
RewriteRule ^play(?:/.*)?$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE,NC]
RewriteRule ^search/(.*)$ viewgames.php?search=$1 [L,QSA,NC]
RewriteRule ^category/(.*)$ viewgames.php?cat=$1 [L,QSA,NC]
RewriteRule ^users/(.*)$ users.php?action=$1 [L,QSA,NC]
RewriteRule ^play/(.+?)/?$ play.php?gn=$1 [L,QSA,NC]
# make sure to check for presence of .php file before rewrite
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([a-z]+)/?$ $1.php [L,NC]
完全清除浏览器缓存或使用新的浏览器测试更改很重要。
答案 1 :(得分:0)
您可以使用以下https
play.php
禁用到RewriteRule
URI中
RewriteEngine on
RewriteCond ℅{REQUEST_URI} play\.php$ [OR]
RewriteCond ℅{REQUEST_URI} /play
RewriteCond ℅{HTTPS} on
RewriteRule ^ http://℅{HTTP_HOST}℅{REQUEST_URI} [L,NE,R]
这会将https://example.com/play.php
重定向到其非SSL版本。
由于您的规则已经检查了http
网址,因此您也可以在规则中添加一个条件,以将play.php
从HTTPS重定向中排除,如下所示:
RewriteCond %{HTTPS} off
#redirect all to https except /play and /play.php
RewriteCond %{REQUEST_URI} !play
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]