HTTPS page link in menu

时间:2011-05-25 作者:John Hunt

好的,我有一个wordpress网站,有很多页面和菜单,我在wordpress的外观/菜单部分定义了这些页面和菜单。

我的一个页面上有一个小付款单,我想用它链接https://blahlbah.com/thepage.. 对于所有其他页面,我希望它们保持为http。

即使我设置了https页面的绝对链接,所有其他相对链接的页面也会在您访问该页面后变为https。

是否有插件或黑客或其他东西可以将某个页面指定为https?

干杯,约翰。

3 个回复
SO网友:Jan Fabry

您需要将相对链接转换为绝对链接。你可以在the wp_nav_menu_objects filter, 获取所有菜单项。只需编辑url 每个项目的属性。

另一种选择是扩展默认值Walker_Nav_Menu 用一个覆盖start_el(), 因此,您可以修改传递的$item 在你把它交给父母之前start_el().

这些是您自己添加的相对链接?如果您通过菜单编辑器添加到WordPress页面或帖子的链接,默认情况下应该是绝对链接。

SO网友:MathSmath

我喜欢Jan的第一个想法——过滤wp\\U nav\\U menu\\U选项。可能是一个很好的全方位解决方案,并且可以快速转化为插件。甚至可以在编辑屏幕上添加一个复选框,上面写着“通过SSL服务此页面”或其他什么?

在过去,我在htaccess中使用了一种黑客重定向解决方案。它看起来像:

# Force a given page to https
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} /your-ssl-page/$
RewriteRule ^(.*)$ https://www.example.com/your-ssl-page/ [R=301,L]

# Force everything BUT the given page to regular http
RewriteCond %{SERVER_PORT} 443
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/your-ssl-page/$
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
如果您只担心一个页面,那么这很好(并且很容易实现),但是如果您有一堆HTTPS URI,或者如果您不擅长解决重写规则的问题,那么这将是一个真正的难题:)

SO网友:Micah Wood

以下是一些在非SSL页面上强制SSL的代码:

// Force SSL
if( !is_ssl() ){
    if ( 0 === strpos($_SERVER[\'REQUEST_URI\'], \'http\') ) {
    wp_redirect(preg_replace(\'|^http://|\', \'https://\', $_SERVER[\'REQUEST_URI\']));
    exit();
} else {
    wp_redirect(\'https://\' . $_SERVER[\'HTTP_HOST\'] . $_SERVER[\'REQUEST_URI\']);
    exit();
}
基本上,您可以使用此代码在所需页面上强制使用ssl,而在其他所有页面上执行相反的操作来删除ssl。在这种情况下,您可能希望为wp\\u redirect指定第二个参数,以启用301重定向,而不是302重定向。您还需要尽可能确保所有链接都指向https版本。

结束

相关推荐

在HTTPS站点的每个页面上都有Internet Explorer“安全信息”

我的网站使用了一个简短的虚荣URL和https(用于管理员登录)。这在除Internet Explorer之外的所有浏览器中的所有自定义主题页上都有效。特别是在IE7中,我在站点中访问的每个页面都会显示以下警告消息:安全信息此页面包含安全和非安全项目。是否要显示不安全的项目?你认为是https导致的吗?我能做些什么来解决这个问题?