我正在尝试将所有网址重定向到https
,但以/feeds/
开头的网址除外。这是一个ExpressionEngine网站,因此我还必须从网址的开头删除index.php
。托管设置还要求?
位于index.php
的末尾。这就是我所拥有的:
RewriteEngine On
RewriteBase /
# Force SSL for everything but feeds
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^/(index.php\?*/)*feeds/ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$2 [R,L]
# Remove index.php from ExpressionEngine URLs
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
但是当我转到http://www.mysite.com/feeds/blog
时,它会被重定向到https://www.mysite.com/?/feeds/blog
。
我不明白为什么会这样。以下是我看到的事件过程:
http://www.mysite.com/feeds/blog
正在使用端口80,因此符合第一个条件
http://www.mysite.com/feeds/blog
以/feeds/
开头,因此未通过下一个条件并退出规则
http://www.mysite.com/feeds/blog
不是文件或目录,因此符合接下来的两个条件。
http://www.mysite.com/feeds/blog
更改为http://www.mysite.com/index.php?/feeds/blog
并循环回到顶部。
http://www.mysite.com/index.php?/feeds/blog
正在使用端口80,它以/index.php?/feeds/
开头,因此它再次失败并退出规则
http://www.mysite.com/index.php?/feeds/blog
确实存在,因此在接下来的两个条件中失败并退出规则。
最终服务器端网址为http://www.mysite.com/index.php?/feeds/blog
,客户端网址仍为http://www.mysite.com/feeds/blog
。
这里发生了什么?那个?
细分来自哪里?
答案 0 :(得分:0)
尝试更正此代码:
RewriteEngine On
RewriteBase /
# Force SSL for everything but feeds
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !/feeds/ [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R,L,NE]
# Remove index.php from ExpressionEngine URLs
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /index.php?/$1 [L]