使用mod_rewrite和wordpress强制除了/ feed之外的所有请求

时间:2013-07-03 17:22:13

标签: regex apache mod-rewrite

Apache VirtualHosts和Mod_Rewrite的新手,但我明白了。

我在这里阅读了几个主题,然后全部跟着它们,尝试了它们,我仍然没有得到我正在搜索的结果。

我的目标:

  • 强制所有传入的请求为HTTPS ,但 Feed会进入/ feed

这一点适用于feedburner,因此我们可以通过https提供我们的网页,但feedburner仍然可以处理来自wordpress的本地Feed。

以下是我正在尝试的当前重写规则:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/feed
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteLog /xxxx/xxxx/logs/rewrite_log
RewriteLogLevel 3

<Directory />
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</Directory>

如果我输入www.mydomain.net/feed并且网址结束www.mydomain.net,上面的内容迫使我回到主页。正如我所期望的那样,它正在强制一切为HTTPS。

我可以使用以下重写规则使相反(使用/ feed强制HTTPS和其他任何内容的HTTP):

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/feed
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteLog /xxx/xxx/logs/rewrite_log
RewriteLogLevel 3

<Directory />
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</Directory>

但是,当我试图颠倒这样的声明时,它不起作用并强制https到/ feed。

wordpress正在做什么违反我的规则?不是100%确定目录/块正在做什么,但是我相信这是由wordpress投入的。

1 个答案:

答案 0 :(得分:1)

试试这个:

RewriteEngine On

#check if https is off, force it on for all except /feed
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/feed [NC]
RewriteCond %{REQUEST_FILENAME} !index\.php$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

#check if https is on, turn off for /feed
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/feed/(.*) [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/feed/%1 [R=301,L]

RewriteLog /xxx/xxx/logs/rewrite_log
RewriteLogLevel 3

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^/server-status$ [NC]
RewriteRule ^(.*)$ index.php/$1 [L,QSA]