0

我希望我的 nginx 将所有不指向 wp-admin 文件夹或 wp-login.php 的内容从 https:// 重定向到 http:// (如果是 https)。我的虚拟主机配置只是说

 server{
         listen 80;
         listen 443 ssl;

然后是关于服务器名称、证书信息和错误页面的一些信息。谁能告诉我如何强制对每个不是 wp-admin 的文件夹和每个不是 wp-login.php 的文件使用 http 而不是 https ?

4

2 回答 2

2

我目前对此的解决方案是根本不重写 nginx 中的 url,而是让 Wordpress 自己完成这项工作。

我的 nginx 配置为允许 http 和 https,就像你的一样,所以人们可以选择他们想要的,因为我使用不受每个人信任的 CAcert 证书。然后我让 Wordpress 强制登录和管理会话重定向到 https,方法是将其添加到wp-config.php

define('FORCE_SSL_ADMIN', true);

但是,这不会将 https 重定向到非管理页面上的 http。但这并没有真正的意义,因为它不能避免证书警告:重定向只会在警告之后发生。另一方面,有些人(例如管理员)实际上已经导入了证书,并且可能也希望将站点的其余部分与 https 一起使用。

更多细节可以在http://codex.wordpress.org/Administration_Over_SSL找到。我通过http://www.surlyjake.com/blog/2011/12/20/wordpress-https-secure-login-with-nginx/偶然发现了这个。

于 2015-01-03T19:14:45.840 回答
1

在您的服务器块中,使用位置规则来匹配/wp-admin//wp-login.php请求并重写这些请求以使用https,并且对于其他所有内容 - 如果这是您想要的 - 重写以使用http。例如:

server {
    listen 80;
    listen 443;
    server_name your.domain.name;

    # your ssl configurations here...
    # example:
    ssl_session_timeout 10m;
    ssl_protocols SSLv2 SSLv3 TLSv1;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;

    location / {
        rewrite ^ http://$server_name$request_uri? last;
    }

    location /wp-admin/ {
        rewrite ^ https://$server_name$request_uri? last;
    }

    location = /wp-login.php {
        rewrite ^ https://$server_name$request_uri? last;
    }

    # your other rules here...

}
于 2012-12-10T14:14:13.277 回答