1. sunnyG

    No comment

    sunnyG
Changes in body
Source | HTML | Preview
@@ -1,145 +1,145 @@
htaccessと言う単語自体はちょくちょく聞いたりしてたんですが、
そもそもhtaccess自体が何なのか、何を指しているのかよくわからなかったので、
それに関しての備忘録です。
#.htaccess とは
.htaccess(ドット・エイチ・ティ・アクセス)とは、Apache(アパッチ)などのソフトウェアが使用されている環境で使用可能なディレクトリ単位のWebサーバー設定ファイルです。
これが特定のディレクトリに設置されると、「.htaccess」内に記述されている内容が、設置されたディレクトリ内とその下層のディレクトリ内に対して適用されます。
#いつ .htaccess ファイルを使うか
##基本使わない
**基本的に、.htaccess ファイルの使用は極力避けてください。**
ユーザ認証の設定は httpd.conf (サーバ主設定ファイルのこと) に書くことができますし、実際その方がより良い設定方法とされています。
##どんな時に使用すべきか
.htaccess ファイルは、**ディレクトリ毎の設定を行ないたいけれど、サーバシステムの root アクセス権限を持っていない**という場合にのみ使うべきものです。
例えば、レンタルサーバーなどで自分専用にWEBサーバーの設定を変えたい場合は、.htaccess ファイルを格納することで、WEBサーバの設定変更(一部)を行うことができます。
他にも、サーバ管理者が頻繁に httpd.conf の設定変更を行ないたくはないので、個々のユーザが .htaccess ファイルを使って設定変更を行なうことを許可したい!そんな時に使用します。
しかし、使用する場合は、httpd.conf で[AllowOverrideディレクティブ][allowoverride]を使って、最低限の許可しか与えないようにすべきですね。
#.htaccess ファイルの作り方
windows環境では、「.htaccess」というネーミングでファイル作成ができません。
その為、以下の手順での作成が必要です。
>
1. テキストエディタで『○○○○.htaccess』という名前のファイルを作成して保存
2. Apacheで制御・設定したい事を記述し保存
1. サーバーにアップロードして『.htaccess』という名前にリネーム(ファイル名の変更)
#.htaccess で出来る事
代表的な4つの項目に分けて、順に設定手順を解説していきます。
##1.ベーシック認証
ディレクトリなどに認証を付けてID/パスワードの入力を強制する仕組みのことです。
用途としては、以下のようなものがあります。
>
+ 公開前のサイトをユーザーとGooglebot共に弾きたい場合
+ アイパスを知っている人だけに公開したい場合
こちらを設定するには、「.htpasswd」というファイルも必要になります。(作成手順に関しては、上述している.htaccessファイルの作成手順と同じです)
まず、「.htaccess」に下記内容を記述してください。
```text
AuthUserfile /フルパス/.htpasswd
AuthGroupfile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
```
上記の、「AuthUserFile」に記述しているパスに、「.htpasswd」を配置する必要があります。
次に、「.htpasswd」に下記内容を記述してください。
```text
id:password
```
idはそのまま記載しますが、passwordの箇所は暗号化する必要があるので [こうしたサイト][makePass] を利用して暗号化します。
##2.301リダイレクト
SEOで最も利用される転送方法で、旧ページから新ページへ評価を継承できるものです。
恒久的な移転と呼ばれ、URLの変更やドメインの移転の際に利用します。
○設定例:
http://example.com/old.html ページから http://example.com/new.html へ301リダイレクトを行う場合
```text
RewriteEngine on
RewriteRule ^old.html$ http://example.com/new.html [R=301,L]
```
詳しくは、 [301リダイレクトについて、必要性と設定手順をまとめてみた][301redirect] を参照してください。
##3.URLの正規化
URLを1つに統一することを指します。
例えば、以下の場合、Googleはそれぞれ別のURLという認識を行なうものの、一般的には同じページが表示されます。
>
+ http://example.com/
+ http://example.com/index.html
+ http://www.example.com/
設定例:index.html有り無しの統一(index.html無しに統一する場合)
```text
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://example.com/$1 [R=301,L]
```
設定例:www有り無しの統一(www無しに統一する場合)
```text
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
```
因みに、www有りに統一したい場合は、以下のような記述になります。
```text
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
```
##4.ファイル一覧表示の中止
**ディレクトリ構造が外部に公開されるセキュリティ的な懸念を無くす**ために使用します。
`http://www.example.com/` のように「 /(スラッシュ)」 で終わるアクセスがあったときに、そのディレクトリ内の「index.html」が代替して呼ばれます。
しかし、index.htmlファイルが見つからなかった場合に、下記のようなディレクトリ内のファイル一覧が表示されてしまいます。
-![img](http://www.atmarkit.co.jp/flinux/rensai/linuxtips/image/705s.gif "ディレクトリ内のファイル一覧")
-画像引用:http://www.atmarkit.co.jp/flinux/rensai/linuxtips/705noindexes.html
+![img](https://qiita-image-store.s3.amazonaws.com/0/198450/69652b54-f6c3-ca4d-ed75-b4d0aabd2f0e.png "ディレクトリ内のファイル一覧")
+出典:http://astro.jp/pn/linux/3262
このようにディレクトリを公開することは、Webサイトの構造を公開することになり、セキュリティの観点から見ると一定のリスクがあります。
そこで、ディレクトリ内のファイル一覧表示を中止することで、ディレクトリ構造の公開を防ぐことができます。
設定方法は、「.htaccess」に下記を記述するだけで完了です。
```
Options -Indexes
```
この設定をした「.htaccess」は、ドメインのルートディレクトリにアップロードしておけば良いです。
#参考
[Apache コア機能][allowoverride]
[Apacheチュートリアル : .htaccessファイル][apache]
[301リダイレクトについて、必要性と設定手順をまとめてみた][301redirect]
[.htpasswd生成][makePass]
[allowoverride]:http://httpd.apache.org/docs/trunk/ja/mod/core.html#allowoverride
[apache]:https://httpd.apache.org/docs/2.4/ja/howto/htaccess.html
[makePass]:http://tech-unlimited.com/makehtpasswd.html
[301redirect]:http://viral-community.com/seo/301-redirect-2992/