web-dev-qa-db-ja.com

メニューのHTTPSページリンク

さて、それで私は私がwordpressの外観/メニューのセクションで定義したたくさんのページとメニューがあるwordpressサイトを持っています。

私のページの1つには、 https://blahlbah.com/thepage を使用してリンクしたい小さな支払いフォームがあります。他のすべてのページでは、httpのままにしておきます。

Httpsページに絶対リンクを設定しても、相対リンクである他のすべてのページは、そのページにアクセスした後もhttpsになります。

その1ページをhttpsとして指定するためのプラグイン、ハック、または何かがありますか?

乾杯、ジョン。

2
John Hunt

相対リンクを絶対リンクに変換する必要があります。これは wp_nav_menu_objectsフィルタ で実行できます。これはすべてのメニュー項目を取得します。各項目のurlプロパティを編集するだけです。

別の選択肢は、デフォルトのWalker_Nav_Menustart_el()をオーバーライドするもので拡張することです。そのため、親のstart_el()に渡す前に、渡された$itemを変更できます。

これらはあなたがあなた自身を追加した相対的なリンクですか?あなたがメニューエディタを介してWordPressページまたは投稿へのリンクを追加するならば、それはデフォルトで絶対であるべきです。

3
Jan Fabry

Janの最初のアイデア、wp_nav_menu_optionsのフィルタリングが好きです。万能な解決策になるかもしれませんし、すぐにプラグインに変わるかもしれません。編集画面に「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]

1ページしか気にしないのであればこれはうまく機能します(そして実装が非常に簡単です)が、たくさんのHTTPS URIがある場合や、書き換え規則のトラブルシューティングが苦手な場合は、非常に面倒です。

3
MathSmath

これは、非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を削除するにはその逆を実行します。この場合、302ではなく301リダイレクトを有効にするために、wp_redirectの2番目のパラメータを指定することをお勧めします。また、すべてのリンクがhttpsバージョンを指すようにすることをお勧めします。

1
Micah Wood