重写规则添加?到URL

时间:2013-11-05 17:37:03

标签: .htaccess mod-rewrite dynamic-url

我正在尝试将所有网址重定向到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

我不明白为什么会这样。以下是我看到的事件过程:

  1. http://www.mysite.com/feeds/blog正在使用端口80,因此符合第一个条件

  2. http://www.mysite.com/feeds/blog/feeds/开头,因此未通过下一个条件并退出规则

  3. http://www.mysite.com/feeds/blog不是文件或目录,因此符合接下来的两个条件。

  4. http://www.mysite.com/feeds/blog更改为http://www.mysite.com/index.php?/feeds/blog并循环回到顶部。

  5. http://www.mysite.com/index.php?/feeds/blog正在使用端口80,它以/index.php?/feeds/开头,因此它再次失败并退出规则

  6. http://www.mysite.com/index.php?/feeds/blog确实存在,因此在接下来的两个条件中失败并退出规则。

  7. 最终服务器端网址为http://www.mysite.com/index.php?/feeds/blog,客户端网址仍为http://www.mysite.com/feeds/blog

  8. 这里发生了什么?那个?细分来自哪里?

1 个答案:

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