我想用我的.htaccess完成以下事情:
/my/smaple/page
这就是目前的情况:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/my/sample/page
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
如果我尝试访问http://www.mydomain.tld/my/smaple/page
,我将被重定向到https://www.mydomain.tld/index.php
。其他一切都有效。我的.htaccess知识很低,所以请解释一下我的错误。
答案 0 :(得分:0)
问题是/my/sample/page
被最后一条规则困住,然后重写引擎循环。这就是发生的事情:
http://www.example.com/my/sample/page
%{HTTP_HOST}
以" www。" %{REQUEST_URI}
以/my/sample/page
/index.php
。%{HTTP_HOST}
仍然以" www。" %{REQUEST_URI}
现在是" /index.php" ;, isn' t /my/sample/page
,请求被标记为重定向到https://www.exmaple.com/index.php
。尝试更改第二条规则:
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/my/sample/page
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
到
RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} !/my/sample/page
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
这样,当重写引擎循环时,%{THE_REQUEST}
变量仍然是GET /my/sample/page
,因此条件仍然失败。
答案 1 :(得分:0)
我自己找到了解决方案。我这样工作正常。
RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} !/websocket_8087_check/
RewriteCond %{THE_REQUEST} !/websocket_8087/
RewriteCond %{THE_REQUEST} !/websocket_8086_check/
RewriteCond %{THE_REQUEST} !/websocket/
RewriteCond %{THE_REQUEST} !/websocket_8085_check/
RewriteCond %{THE_REQUEST} !/websocket_8085/
RewriteCond %{THE_REQUEST} !/websocket_8084_check/
RewriteCond %{THE_REQUEST} !/websocket_8084/
RewriteCond %{THE_REQUEST} !/websocket_8083_check/
RewriteCond %{THE_REQUEST} !/websocket_8083/
RewriteCond %{THE_REQUEST} !/websocket_8082_check/
RewriteCond %{THE_REQUEST} !/websocket_8082/
RewriteCond %{THE_REQUEST} !/websocket_8081_check/
RewriteCond %{THE_REQUEST} !/websocket_8081/$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]