WordPress&ロリポップで自作404ページ

2019/3/3(sun) 徹夜でWebってますw

8ページの商用サイト リニューアル案件
旧サイトはWordPressですが、10ページ程度の小規模サイトならHTMLで十分です。

方向性として
  • 利便性/綺麗に/広報/内部SEO
  • 画像や事例を多く載せる
  • メールフォームの設置
  • レスポンシブ(HTML5/CSS3)
  • 独自ドメインに無料SSLを適用し、正規化
  • 将来のブログ用にWordPressを残す
という感じの提案で、原稿も充実するよう打診。
兎に角、旧サイトがダメダメで、今回の新サイトにクラさんも満足そうです。

WordPressの動的ファイルと静的ファイルの混合ハイブリットw
というか、混合の前例があったので問題なく、トップディレクトリに主要ファイルを置くだけで問題なく混在できました。しかし、.htaccessが効かない・・・
WordPressを非公開にしておけば一旦は済むのですが、将来性と301リダイレクト/404の動作確認の為に公開設定のまま進めると、やはり問題が発生しました。
# END WordPressの下部に追記するだけで良いはずが、.htaccessを何度も書き換えたり試行錯誤しましたが、うーん良くわかりませんw

  1. 独自ドメインを無料SSLで適用し正規化も
    ロリポップでは、ディレクトリを考慮する必要がありません。
    .htaccessの記述は、RewriteCond %{HTTPS} !=on [NC]の他に、
    # BEGIN WordPress内に、RewriteCond %{HTTPS} offの方法があるようです。
  2. 日本語ディレクトリの問題
    エンコードするも301転送せず、UTF-8で保存&日本語のまま記述で転送されました。
    しかし、1つのファイルは、エンコードしないとNG。何が正解なのか謎?
    だから、日本語ドメインとか日本語URLが嫌いですw
  3. 自作404ページを表示したいが、
    何故か、WordPress側の404ページが表示される!
    404.phpの問題ではないので、何故.htaccessが効かないのか謎?
    以下を訂正します!
    答え: RewriteEngine Off これでやっと自作404ページが表示されました!
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Redirect permanent /日本語/ https://〜〜〜.com/hoge.html
Redirect permanent /%e6%96%99%e9%87%91/ https://〜〜〜.com/hoge.html
RewriteEngine Off
ErrorDocument 404 /error
〜ファイル名〜

これで意図通りに動作し、SSLでの正規化もできました。
ただ、疑問が1つ。 非SSL経由からの404だとSSLにリダイレクトされません。
まあ、所詮は404なので問題無いのですが、HTTPステータスコードも404だし、アドレスバーにはエラーURLをそのまま表示するべきなので、これで正解って事なのでしょうね?

2019年4月 訂正後/修正後

前回は上手く行ったのに、別の環境で何故か失敗していましたので、以下に修正しました・・・

.htaccessを一旦元に戻し、通常通りに正規化
エラーページは、テーマ内の404.phpを編集!
まあ、こちらの方が良いでしょう。ステータスコードも404になっています。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Redirect permanent /日本語/ https://hoge.com/hoge.html
Redirect permanent /%e6%96%99%e9%87%91/ https://hoge.com/hoge.html

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.hoge\.com$
RewriteRule ^(.*)$ https://hoge.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://hoge.com/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

これでHTTPSで正規化できて、エラーページもOKです。
ついでに、www無し、indexも無し統一にします。これで大丈夫です!


コメント

コメントを書く
お名前:

メール:

Web URL:

コメント: [必須入力]

認証コード: [入力必須] ※ 画像の文字を半角で入力してください。
認証 : 一二三

 ※ 承認されたコメントのみ表示されます。