0

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

我在这里阅读了几个主题并关注了它们,尝试了它们,但我仍然没有得到我正在寻找的结果。

我的目标:

  • 强制所有传入请求为 HTTPS ,但进入 /feed 的提要除外

这样做的目的是为了 feedburner,因此我们可以通过 https 提供我们的网页,但 feedburner 仍然能够处理来自 wordpress 的本机提要。

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

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 并且 url 以 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% 确定 Directory/ 块在做什么,但我相信这是由 wordpress 放入的。

4

1 回答 1

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]
于 2014-01-22T23:27:50.070 回答