Apacheのエラー画面にApacheの情報を出さないようにする

Apacheはデフォルトでは404画面などでApacheのバージョンなどが表示されてしまいます。
それを防ぐためには、httpd.confの以下の箇所を修正します。

修正ファイル:/etc/httpd/conf/httpd.conf

①バージョン番号だけ隠す場合
ServerTokensを「OS」から「Prod」に変更する
# ServerTokens OS
ServerTokens Prod

②『Apache』という表示も隠す場合
ServerSignatureを「On」から「Off」に変更する
# ServerSignature On
ServerSignature Off

Share

【Apache】htaccessのRewriteでGETパラメータも残す

nginxが台頭してきている今日この頃。Apacheの話です。
少しハマったのでメモします。

■環境
CentOS 6.6
httpd 2.2.15

htaccessにてリダイレクト処理を記載する際、
以下のように書くとGETパラメータがリダイレクト時に落ちてしまいます。
RewriteEngine on
RewriteBase /
RewriteRule ^api.php(.*)$ api2.php$1

例えば、このまま「https://sample.com/api.php?name=tanaka」にアクセスすると
リダイレクト後は「https://sample.com/api2.php」となってしまいます。

RewriteでGETパラメータを扱いたい場合は、『RewriteCond』を使って以下のように記載します。
RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} (.*)$
RewriteRule ^api.php$ api2.php?%1

これで「https://sample.com/api.php?name=tanaka」にアクセスすると
リダイレクト後は「https://sample.com/api2.php?name=tanaka」となります。
※RewriteRuleの右側「$1」ではなく「%1」です。間違えないように。

何が起こっているかというと、RewriteCondの『QUERY_STRING』で指定した正規表現に一致する
GETパラメータが%変数に格納されているようです。
例えば以下のような記載もできます。
RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} name=(.*)$
RewriteRule ^api.php$ api2.php?onamae=%1

これで「https://sample.com/api.php?name=tanaka」にアクセスすると
リダイレクト後は「https://sample.com/api2.php?onamae=tanaka」となります。

正規表現で複数パラメータを取ることも可能なので、
RewriteCond %{QUERY_STRING} param1=([a-z]+)&param2=([a-z]+)&param3=([a-z]+)$
と記載すれば、param1は「%1」、param2は「%2」、param3は「%3」で取得できます。

Share

ダイジェスト認証の設定方法

Apacheで動いているWEBサーバにて、ダイジェスト認証を入れる方法です。
■環境
CentOS Linux release 7.2.1511 (Core)
Apache/2.4.6

Apacheがダイジェスト認証に対応しているか確認します。
以下のコマンドにて結果が出力されれば対応しています。

# grep digest /etc/httpd/conf.modules.d/ -r
conf.modules.d/00-base.conf:LoadModule auth_digest_module modules/mod_auth_digest.so

ダイジェスト認証用のIDとパスワードのセットを作成します。
下記の「Sample Auth」は認証名で「sampleuser」は設定するIDです。適宜書き換えてください。
また「/etc/httpd/conf/.hpass」が生成されるファイルですが、パスもファイル名も任意です。

# htdigest -c /etc/httpd/conf/.htpass ’Sample Auth' sampleuser
Adding password for sampleuser in realm Logical Dice Auth.
New password: ←設定するパスワードを入力する
Re-type new password: ←設定するパスワードを再度入力する

あとはApacheの設定ファイルにて設定をします。
以下の例では「/var/www/html/sample」配下のコンテンツにWEBブラウザにてアクセスした際に
ダイジェスト認証が表示されるようになります。
下記のAuthUserFileは上記で生成したファイルを指定してください。

<Location "/sample/">
   AuthType Digest
   AuthName “Sample Auth"
   AuthUserFile "/etc/httpd/conf/.htpass"
   Require valid-user
</Location>

これでApacheの設定ファイル再読み込み(再起動)をすればダイジェスト認証がかかるようになります。

Share