なぜ、ホームページの文字が化けるのでしょうか?
それは以下の事が考えられます。
大方、ホームページを作成する場合は、Windows等よりホームページ作成アプリケーションで作成していると思います。(テキストエディタでも、もちろん作成できます。)
何も気にせずに出来上がったホームページを保存した場合、通常、文字コードはShift-JISという文字コードで保存されます。
このShift-JISは、日本語Windows標準の文字コード体系の為、各ホームページ作成アプリケーションのデフォルト文字コードはShift-JISになります。
当サイトの様に、『Fedora/CentOS インストール後の設定[日本語コードの変更(UTF-8 → eucJP)]』Linuxの文字コードを設定した場合はEUC-JPというコードで管理される事となり、Webサーバより送信されるデータがブラウザ側で判断できない(誤認識)場合に文字化けが発生します。
ブラウザに文字コードを認識させるには、htmlソースのタグ「<HEAD>」内に以下のタグを記述します。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>はじめての自宅サーバ構築</TITLE> </HEAD> <BODY> <CENTER> <H3>文字化け回避</H3> 漢字 ひらがな カタカナ 123 ABC 123 ABC </CENTER> </BODY> </HTML> |
上記のタグ「<META http-equiv="Content-Type" content="text/html;
charset=Shift_JIS">」を記述していなくてもブラウザが自動判別して正常に表示されていても、明示的に記述する方がよいでしょう。
大抵は、charsetの属性値は「Shift-JIS」か「EUC-JP」で良いと思います。(正確にはソースを保存した文字コードを記述します。)
詳しく知りたい方は、検索サイトで「html 文字コード charset」キーワードで検索すると多々の紹介サイトがヒットしますのでそちらをご覧ください。
apacheのデフォルトでのドキュメントルートは「/var/www/html」となっています。
このパス以外にドキュメントルートを変更した場合、設定ファイル「/etc/httpd/conf/httpd.conf」を変更します。
以下が、ドキュメントルートを変更した際の設定ファイル変更場所になります。
*:説明上、ドキュメントルートを「/home/www/html」とさせて頂きます。
変更後にapacheを再起動し、ページを表示させてみると以下の画面が表示されてページが表示できない場合があります。
ドキュメントルートの変更 # vi /etc/httpd/conf/httpd.conf # # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/home/www/html" |
ドキュメントルートに設定しているパスを表示 # ls -l /home/ 合計 32 drwx------ 4 linux linux 4096 1月 5 20:43 linux drwx------ 3 www www 4096 1月 6 15:21 www 左側が所有者、右側がグループになります *:所有者を変更するには、apache設定ファイルの以下の設定内容に依存します。 /etc/httpd/conf/httpd.confの内容 # # If you wish httpd to run as a different user or group, you must run # httpd as root initially and it will switch. # # User/Group: The name (or #number) of the user/group to run httpd as. # . On SCO (ODT 3) use "User nouser" and "Group nogroup". # . On HPUX you may not be able to use shared memory as nobody, and the # suggested workaround is to create a user www and use that user. # NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET) # when the value of (unsigned)Group is above 60000; # don't use Group #-1 on these systems! # User apache Group apache 所有者・グループの変更 # chown apache:apache /home/www/ |
上記を行うことによって、正常にhtmlが表示される様になります。
上記の方法「パスの所有者をapacheに変更する」を行った場合、何かと不具合(問題)があります。
たとえば、今回「/home/www/」を例に例えると、『www』ユーザを作成した場合の、純粋なwwwユーザホームパスになった場合です。
仮に、wwwユーザでサーバにログインした場合、以下の様にエラーとなってしまいます。
# telnet localhost Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Fedora Core release 2 (Tettnang) Kernel 2.6.9-1.6_FC2 on an i686 login: www Password: No directory /home/www! Logging in with home = "/". -bash: /home/www/.bash_profile: 許可がありません |
これは、本来のwwwユーザのホームパスである「/home/www/」の所有者を「apache」にしてしまった為です。
例えば、wwwユーザーでホームページをアップデートしようとする際、FTPなどのツールでログインができないし、htmlファイル自体を置く事もできなくなってしまいます。
これを回避するには、「/home/www/」パスを本来のwwwユーザとし、所有者以外でも読み取りできる様にパーミッションを追加します。
現状の確認 # ls -l /home/ 合計 32 drwx------ 4 linux linux 4096 1月 5 20:43 linux drwx------ 3 apache apache 4096 1月 6 15:21 www 本来の所有者・グループに戻す # chown www:www /home/www/ # ls -l /home/ 合計 32 drwx------ 4 linux linux 4096 1月 5 20:43 linux drwx------ 3 www www 4096 1月 6 15:21 www 所有者以外に読み取りの権限を与える # chmod 705 /home/www/ # ls -l /home/ 合計 32 drwx------ 4 linux linux 4096 1月 5 20:43 linux drwx---r-x 3 www www 4096 1月 6 15:21 www パスのデフォルトである「読み取り」と「実行」を付与しました。 |
パーミッション(アクセス権)とは?
「ls -l」コマンドを入力した際に以下の様な結果が表示されます。
drwx---r-x 3 www www 4096 1月 6 15:21 www
上記で表示される一番左の「drwx---r-x」表記がパーミッションになり、各1文字ごとに意味を持っています。
Directory | 所有者 | グループ | その他 | ||||||
---|---|---|---|---|---|---|---|---|---|
Read | Write | eXec | Read | Write | eXec | Read | Write | eXec | |
"d" Or "-" | "r" Or "-" | "w" Or "-" | "x" Or "-" | ← | ← |
上記を行うことによって、本来の「www」ユーザでのログオンと、htmlのアップロードも可能になります。
CGIを実行するPerlの場所を確認する # which perl /usr/local/bin/perl 各CGIの先頭行と上記のPerlの場所が合っているか確認する # vi xxxxx.cgi #!/usr/local/bin/perl |
apache設定ファイルの確認 apacheの設定ファイル内でCGIを実行するパス(ディレクトリ情報)の 設定で「ExecCGI」が定義されているか確認する # vi /etc/httpd/conf/httpd.conf <Directory "/var/www/html/cgi-bin"> Options Includes ExecCGI FollowSymLinks : : </Directory> |
apache設定ファイルの確認 以下の例では、「.cgi」と「.pl」拡張子がCGI実行できます # vi /etc/httpd/conf/httpd.conf AddHandler cgi-script .cgi .pl |
スクリプトの構文も正しく、パーミッションなども問題ないのにアクセスすると以下のような画面が表示され実行されない場合があります。
apache設定ファイルの確認 apacheの設定ファイル内でSSIを実行するパス(ディレクトリ情報)の 設定で「Includes」が定義されているか確認する # vi /etc/httpd/conf/httpd.conf <Directory "/var/www/html/cgi-bin"> Options Includes ExecCGI FollowSymLinks : : </Directory> 備考)「Includes」はSSIの「EXEC」コマンドは使用できますが、 「IncludesNoExec」に変更すると、SSIの「EXEC」コマンドは使用できなくなります。 |
apache設定ファイルの確認 以下の例では、「.shtml」と「.inc」拡張子がSSI実行できます # vi /etc/httpd/conf/httpd.conf AddHandler server-parsed .shtml .inc |
『CGI(Common Gateway Interface)の実行ができない(SELinuxを無効にして確認してみる)』参照
apache設定ファイルの確認 「AllowOverride」ディレクティブが「All」になっている事を確認する # vi /etc/httpd/conf/httpd.conf <Directory "/var/www/html"> AllowOverride All : : </Directory> |
apache設定ファイルの確認 「AccessFileName」ディレクティブが「.htaccess」になっている事を確認する # vi /etc/httpd/conf/httpd.conf # # AccessFileName: The name of the file to look for in each directory # for additional configuration directives. See also the AllowOverride # directive. # AccessFileName .htaccess *:「AccessFileName」ディレクティブが別名「例:(.himitsu)」であれば、 「.htaccess」ファイル(分散設定ファイル)は、「.himitsu」として、設置しなければなりません。 |
ここでは、アクセス制限(認証)を例にとって、説明します。
認証パス「/var/www/html/security/」の「.htaccess」内容を確認する *:パス「security」を例にしています # vi /var/www/html/security/.htaccess AuthType Basic AuthName "Please enter your UserName and password" AuthUserFile /var/www/secure/.htpasswd AuthGroupFile /dev/null require valid-user |
【上記ディレクティブの説明】
CA証明書とは、承認局(サーバ)がユーザ等の認証をする為に使用します。
この証明書が無ければユーザーはSSLにて確立された通信を行うことができません。
クライアント(ユーザ)用のCA証明書の作成はCA証明書をブラウザにインポートするためのca.derファイル作成を参照して下さい。
また、CA証明書は作成しただけでは意味を持ちません。
例を例えると、家の鍵を鍵屋に注文しただけで受け取っていなければ、家に入ることができませんよね?
この鍵(CA証明書)をSSL通信で行うクライアントにインポート(取り込み)を行わなければなりません。
クライアントへの取り込み方法はクライアントへのCA証明書インストールを参照ください。
この場合は、3つ疑う場所があります。
apacheのバージョンが 2.0.53未満(Ver < 2.0.53)では、大容量ファイルに対応していません。
以下を実施して、導入されているapache(httpd)のバージョンを事前に確認してください。
apache(httpd)のバージョン確認方法 # rpm -qa httpd httpd-2.2.3-5 ちなみに2007年01月15日現在での各ディストリビューションでのバージョンは以下となっています。 【FedoraCore1 の場合】 [root@fedora root]# rpm -qa httpd httpd-2.0.51-1.10.legacy 【FedoraCore2 の場合】 [root@fedora root]# rpm -qa httpd httpd-2.0.51-2.9.5.legacy 【FedoraCore3 の場合】 [root@fedora root]# rpm -qa httpd httpd-2.0.53-3.3 【FedoraCore4 の場合】 [root@fedora ~]# rpm -qa httpd httpd-2.0.54-10.4 【FedoraCore5 の場合】 [root@fedora ~]# rpm -qa httpd httpd-2.2.2-1.2 【FedoraCore6 の場合】 [root@fedora ~]# rpm -qa httpd httpd-2.2.3-5 【Fedora7 の場合】 2007年06月06日現在 [root@fedora ~]# rpm -qa httpd httpd-2.2.4-4 【Fedora8 の場合】 2007年11月16日現在 [root@fedora ~]# rpm -qa httpd httpd-2.2.6-3 【Fedora9 の場合】 2008年05月16日現在 [root@fedora ~]# rpm -qa httpd httpd-2.2.8-3 【Fedora10 の場合】 2008年12月09日現在 [root@fedora ~]# rpm -qa httpd httpd-2.2.10-2 【Fedora11 の場合】 2009年06月15日現在 [root@fedora ~]# rpm -qa httpd httpd-2.2.11-8 【Fedora12 の場合】 2009年12月17日現在 [root@fedora ~]# rpm -qa httpd httpd-2.2.13-4 【Fedora13 の場合】 2010年06月15日現在 [root@fedora ~]# rpm -qa httpd httpd-2.2.15-1 【Fedora14 の場合】 2010年11月09日現在 [root@fedora ~]# rpm -qa httpd httpd-2.2.16-1 【Fedora15 の場合】 2011年06月24日現在 [root@fedora ~]# rpm -qa httpd httpd-2.2.17-10 【Fedora16 の場合】 2011年11月16日現在 [root@fedora ~]# rpm -qa httpd httpd-2.2.21-1 【Fedora17 の場合】 2012年06月28日現在 [root@fedora ~]# rpm -qa httpd httpd-2.2.22-4 【CentOS4 の場合】 [root@centos ~]# rpm -qa httpd httpd-2.0.52-28 【CentOS5 の場合】 2007年04月19日現在 [root@centos ~]# rpm -qa httpd httpd-2.2.3-6 【CentOS6 の場合】 2011年07月21日現在 [root@centos ~]# rpm -qa httpd httpd-2.2.15-5 |