「.htaccess」タグアーカイブ

【解決済】ロリポップサーバーで、.htaccess等を更新しても反映しない時の対処法

.htaccess でwwwありなし、index.htmlありなし、httpsのURLの正規化をしてもロリポップサーバーで効かない時の対処法

ロリポップサーバーで担当者が蒸発したホームページのSSL化をしてくれと頼まれた。

担当者の蒸発はよくある話なので、マネージドレンタルサーバーの大手のロリポップ、クリック一発でサクッと終わるだろうと思っていたら意外と手こずったのでメモ。

まずはSSL化。クリック一発。ロリポップでSSLは無料なので何の問題もなし。

次に.htaccessで wwwなし。index.htm を表示させない。httpでアクセスした時にhttpsに転送する。
をした。

<IfModule mod_rewrite.c>
RewriteEngine On

#indexなし
RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
RewriteRule ^(.*)index.(html|htm|php)$ https://%{HTTP_HOST}/$1 [R=301,L]

#wwwなし
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

#https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

いつもの作業なので、これは問題なく終わった。

はずだった….

動作チェックをして、いる時に
http://xxxxx.comhttps://xxxxx.com へリダイレクトされ問題なし!
http://xxxxx.com/index.htmhttps://xxxxx.com へリダイレクトされ問題なし!
https://xxxxx.com/index.htmhttps://xxxxx.com へリダイレクトされ問題なし!

https://www.xxxxx.comhttps://www.xxxxx.com のまま、www無しへリダイレクトされず!
http://www.xxxxx.com/index.htmhttp://www.xxxxx.com/index.htm のまま www無し、index.htm無しへリダイレクトされず!

.htaccess がwwwの時に効いてない。なぜ?

htaccessが効かない理由はロリポップサーバーの仕様のせいだった。

結論的に、www付きのサーバー上の参照ディレクトリと、www無しの参照ディレクトリが違うのが問題だったのだ。
なぜかwww付きはサブドメイン扱いになっている。


ロリポップサーバーにログイン。
「サーバーの管理・設定」→「独自ドメイン設定」を見てみよう。
ドメイン横の「確認・変更」を押すと、変更できる。

http://xxxxx.com の「公開(アップロード)フォルダ」は「xxxxx.com」になっている。
そして「xxxxx.com」フォルダの中に「.htaccess」を入れている。なので問題なくリダイレクトされていたわけだ。

ふむふむ。問題なし。

次に、「サーバーの管理・設定」→サブドメイン設定を見てみよう。

ここではwww付きにアクセスされた時に参照される「公開(アップロード)フォルダ」を設定できる。

今回は、ここでスペルミスをしていたので、別ディレクトリを参照してしまっていて、www有りのURLでは.htaccess が効かなかったわけだ。

前任の担当者が蒸発する前に、何をしていたのか分からないので、なぜディレクトリが別になっていたのか不明だが、今回はwwwありなしを同じディレクトリに設定すると見事に解決した。

単純な事だった。

ロリポップサーバーでURLの正規化ができない、wwwをつけると更新が反映されない時は?

この時も.htaccess の場合と同じで、wwwありの参照ディレクトリと、wwwなしの参照ディレクトリが異なっていて、一方のディレクトリにのみアップロードされているためだ。

【解決済】さくらの共用サーバーで運用中のWordPressでPHPバージョンを7に上げても「PHPの更新が必要です」が消えない時の対処法

PHPバージョンが5系(5.6.3など)だとWordpressにPHPの更新が必要ですと表示される。それを、7系(7.3.6など)に上げても、なぜかこの表示が消えてくれない時の対処法


PHPの更新が必要です
サイトが安全ではないバージョンの PHP を実行していることを検出しました。
PHP とは何ですか ? サイトにどう影響しますか ?
PHP は WordPress の開発や保守に使用されているプログラミング言語です。PHP の新しいバージョンはより高速で安全なため、アップグレードするとサイトのパフォーマンスに良い影響を与えます。
PHP の更新についてさらに詳しく (新しいタブで開く)

と書かれてたメタボックスが表示される。

PHPバージョンを7.3.xにちゃんと上げても、メタボックスが消えない場合がある。

さくらの共用サーバで確認済み。
 

実際にPHPバージョンは上がってないのか?

サーバーで確認しても、PHPを走らせて確かめてみても、実際にはPHPバージョンは7系に上がっているようだ。
 

じゃあアラートが消えない原因はなに?

まず、.htaccessの中身を確認してみよう。

FTPソフトなどで.htaccessをDLして確かめてみるとこんな感じ。

Action myphp-script /php.cgi
AddHandler myphp-script .php .html

# 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

# BEGIN WordPress 以下は普通のWordpressの記述。

上の Action myphp-script /php.cgi これが問題の元凶。

次に php.cgi の中身 を確認してみる。これもFTPソフトでDLしてみる。

#!/bin/sh
exec /usr/local/php/5.6/bin/php-cgi
#exec /usr/local/php/5.4/bin/php-cgi

原因これでした。exec は外部コマンドの実行で、ここが、php5.6になっちゃってる。
php5.4はコメントアウトされているので関係ない。

しかし、行自体を削除してしまうと、さくらサーバーでは、php が動かなくなる。つまりWordPressは動かない。

という訳で、 ↓↓↓

さくらサーバーの場合、バージョンを指定せずにphpを動かすには下記のコードを追加。

exec /usr/local/bin/php-cgi

一応元の記述もコメントアウトで残すと、 ↓↓↓

こんな感じでいいと思う。

#!/bin/sh
#exec /usr/local/php/5.6/bin/php-cgi
#exec /usr/local/php/5.4/bin/php-cgi
exec /usr/local/bin/php-cgi

php.cgiを変更して、FTPでアップロードして上書きしたら、「PHPの更新が必要です」は消えました。

さくらのVPSに導入したWordPressでRSSのFeedや、個別記事のページが404 not foundになったら

WordPressでRSSフィードが取得できない時に疑うこと

ワードプレスでは自動でRSSを出力してくれる。その取得URLは下記の通り、

http://example.com/feed/
http://example.com/feed/rss/
か、
http://example.com/?feed=rss
http://example.com/?feed=rss2

他にもあるが、どうでもいいので割愛。

マネージド・レンタルサーバーであれば多分このエラーはレアケース。

ちゃんと指定してもRSSが取得できないケースがある。
VPSにインストールした場合は割とある。
その原因は .htaccess にある。

 

症状

・RSSが取得できない
・直接RSSのURLを見に行くと404エラー(そりゃ取得できる訳もない)
・個別記事も404
・カテゴリーなども404

 

確認

サーバー内(FTPソフトなどで見る)Wordpressのフォルダの .htaccess をダウンロードして中身を見てみよう。

# BEGIN WordPress
<ifmodule mod_rewrite.c=”">
RewriteEngine On
RewriteBase /wp/
RewriteRule ^index\.php$ ? [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

大体こんな感じのものが書かれているはず。

書かれてなければコピペして上書きアップロードで完了。

書かれてるのにダメな場合もある。
よくあるパターンはVPS使っていて .htaccess が無効になっている場合。

 

VPSで個別記事が404になる時の解決法

.htaccess が無効になっているのを有効化する方法。通称黒い窓を触る必要がある。

さくらのVPSで説明するが、他のVPSでもやり方は割と同じ。


さくらの会員メニューにログインする。

「契約情報」→「契約サービス一覧」→「サーバ設定」→「コンソールの中のシリアルコンソール」

なお、シリアルコンソールでなくてもやり方は同じ。

基本的には、マウスは使えない、コピペなど普通にはできない。

キーボードの矢印とコマンドとエンターでやっていく。

[root@www~]#

となっている状態で

vi /etc/httpd/conf/httpd.conf

と入力して(何回か)エンター。

ずらーっと英語が出て来るので

/AllowOverride

とコマンドを打てば検索できる。

「n」 で次の検索結果へ、「N」で前へ検索していく。

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be “All”, “None”, or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None

この 「None」 を 「All」 に変更する。

「i」をキーボードで押すとインサートモードになる。

つまり書き換えができる。

インサートモードで「バックスペース」で削除、普通に記入して

記入し終わったらインサートモードを止める。

「ESC」 でインサートモード終了。

続いて mod_rewrite の検索。

/LoadModule rewrite_module

LoadModule rewrite_module modules/mod_rewrite.so の先頭に # がついていれば、その # を削除。

# はコメントアウトなので、 # の行は無視される。

インサートモードを解除(コマンドモードで)

「:wq」エンターで、上書き保存。

[root@www~]# となってるところで、

service httpd restart エンター

で、 httpd を再読み込み。

これで、.htaccess が効くようになり、404は解消されるはず。