web-dev-qa-db-ja.com

ドメインエイリアスを維持する

Example.comにシングルサイトのWordpressがインストールされています。 www.example.comがexample.comのエイリアスになるようにDNSが設定されています。クライアントはユーザーにwwwを見てもらいたいと思っています。入力した場合はナビゲーションバーに表示されるので、これは重要です。

私は彼らのウェブサイトをcpanelを実行しているApacheサーバーでホストしました。 cpanelのドメインはexample.comに設定されています。私がワードプレスをインストールする前に、www.example.comと入力するとディレクトリが表示され、wwwはそのまま残りました。ナビゲーションバーで、とても素晴らしい。

私はワードプレスをインストールした後、しかし、WWW。削除されつつあります。私がリダイレクトトレースをしたとき私はこの奇妙な302リダイレクトを見つけました:

http://www.example.com
Status: 302 Found
Code:   302
Date:   Thu, 24 Aug 2017 00:23:08 GMT
Server: Apache/2.4.16 (Unix) OpenSSL/1.0.1e-fips mod_bwlimited/1.4
Location:   https://example.com
Content-Length: 346
Connection: close
Content-Type:   text/html; charset=iso-8859-1

Sslを強制するようにwordpressのhtaccessファイルを変更しましたが、これは301だと思いました。

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_Host} eq "example.com"
ErrorDocument 403 https://example.com

わかりました、何でも。だから私はコードのこのセクションを削除した、URLバーはまだwwwを保持していません。今回は301リダイレクトを取得します。

http://www.example.com
Status: 301 Moved Permanently
Code:   301
Date:   Thu, 24 Aug 2017 00:35:22 GMT
Server: Apache/2.4.16 (Unix) OpenSSL/1.0.1e-fips mod_bwlimited/1.4
X-Powered-By:   PHP/5.6.16
Location:   http://example.com/
Content-Length: 0
Connection: close
Content-Type:   text/html; charset=UTF-8

私は他にどこを見るべきかわからない。 URLバーにwwwを保存させるには、cpanel、htaccess、またはwordpressで何をする必要がありますか。

1
Kumar

WordPressダッシュボードで正規のホスト名(wwwを使用)を設定する必要があります。[設定]> [一般]で、適切な[WordPressアドレス(URL)]および[サイトアドレス(URL)]プロパティを設定します。

あるいは、wp_config.phpおよびWP_HOME定数をそれぞれ定義することによって、これらの値をWP_SITEURL内のハードコードにすることができます。

参照:
https://codex.wordpress.org/Changing_The_Site_URL

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_Host} eq "example.com"
ErrorDocument 403 https://example.com

ちょっとちょっとしたことですが、これはリダイレクトからHTTPSへの非常に回り道のある(お勧めできません)方法です。はい、これは301(永久)リダイレクトではなく、302(一時的)リダイレクトをトリガーします。 ErrorDocumentの副作用があるため、これはまったくリダイレ​​クトするだけです。そしてそれはドキュメントルートにリダイレクトするだけです、要求されたURLは失われます。

このコードは、実際にはHTTP専用サイトへのアクセスをブロックし、403禁止をトリガーします。カスタム403の2番目の引数として絶対URLを設定しているので、ApacheはあなたのサイトのルートであるURLへの外部(302)リダイレクトを引き起こします。

サーバーの設定にアクセスできない場合、このリダイレクトは通常.htaccessのmod_rewriteを使用して実現されます。例えば:

RewriteCond %{HTTPS} !on
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]

これは.htaccess内の既存のWordPressディレクティブをbeforeする必要があります。


WordPressで適切なホスト名を設定した後は、必要に応じて.htaccessでHTTPSとwwwの両方のリダイレクトを処理できます(もう少し効率的です)。例えば:

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_Host} !www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]

テストする前にブラウザのキャッシュをクリアしてください。


私はwwwが必要です。ユーザーが最初に入力した場合にのみ保持されます。

特別な理由がない限り、これは一般的に悪い考えです。これを軽減するためにheadセクションにrel="canonical"タグを設定することはできますが、(両方のホストがインデックス付けされるのを防ぐために)プリファレンスを指定できますが、コンテンツの複製が作成される可能性があります。しかし、統計はそれらの間で分割されます。クッキーはどのように設定していますか? WWWと非WWW(ログイン、セッションなど)の間でクッキーを共有したい場合は、どのホストがアクセスされているかにかかわらず、クッキーがapexドメインに設定されていることを確認する必要があります。デフォルトの動作.

とにかく、HTTPをHTTPSにリダイレクトしたいがアクセスされたホスト(www、non-www、またはxyzエイリアス)を保持したい場合は、HTTP_Hostサーバー変数を参照できるので、これははるかに単純なリダイレクトです。例えば:

RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
1
MrWhite

Wordpressで正規のホスト名を変更すると、トラフィックはすべてwwwになります。この特定の使用例では、ユーザーがwwwとして入ってきた場合に限ります。トラフィックはwww URLを見続けるべきです。それ以外の場合は、入力したとおりにexample.comが表示されます。もう少し調べたところ、これを行う方法はwp_config.phpに次の行を追加することであることがわかりました。

define('WP_SITEURL', 'http://' . $_SERVER['HTTP_Host']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_Host']);

このコードの私の理解は、DNSとCpanelの両方でexample.comのエイリアスとして宣言されたURLは、URLが保存された状態でWordPressサイトに表示されるということです。

MrWhiteのSSLアドバイスに便乗するために、2つのURL(www付きとなし)を許可する必要があるという事実に対応するように、私は彼のコードを少し修正しました。

# Force SSL While Preserving www.#
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_Host} www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]

# Force SSL for non-www. Traffic #
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_Host} !www\.
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]

3番目または4番目のetcエイリアスを追加する必要がある場合は、RewriteCondをより具体的にする必要があり、追加のRewriteブロックが必要になります。

0
Kumar