WordpressなどのPHPサイトの下にpukiwikiなどの同じくPHPで動く動的サイトや、静的ファイルを設置する方法です。
通常DocumentRoot直下にwordpressなどのPHPサイトを配置すると、その配下にフォルダを切ってもwordpress以外のものは表示できなくなります。
もちろんDocumentRoot配下で分ければ問題ないのですが、メインはWordpressのサイトだけどサイトの補足としてpukiwikiや、別途静的なファイルの設置を行いたいときの設定です。
https://domain.com/wp/ #Wordpressを表示
https://domain.com/wiki/ #Wikiや静的ファイルを表示
↑こんな感じでは分けられると思うけど
↓今回はこのようにしたい。
https://domain.com/ #Wordpressを表示
https://domain.com/wiki/ #Wikiや静的ファイルを表示
1.なぜフォルダが開けないのか?
なぜ単純にフォルダを切っても表示することができないのか?それは .htaccessファイルが関係しています。
Wordpressがそうなのですが、インストールしたルート以下のURIをその後PHPで処理する構造になっています。
つまり、https://domain.com/ でアクセスできるWordpressであれば、https://domain.com/aaa/ https://domain.com/bbb/ であっても、すべて一度https://domain.com/index.php に転送されて処理されている場合が多いです。
どのように実現しているかというと、
.htaccessRewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L]
これは何が書いてあるかというと、RewriteCond でファイルではない場合、どのURLであっても、index.php に行きなさい。と書いてあります。
これが書いてあると、たとえ/wiki/のようなフォルダを作りhtmlを設置して、ブラウザからアクセスしても、すべて index.php に行ってしまいフォルダ内のhtmlが開けないこととなります。
2.対処方法
対処方法は簡単で、該当のURIが入ったときだけ処理を切り分ければ良いです。
.htaccessRewriteEngine On RewriteCond %{REQUEST_URI} !^/wiki #リクエストURIが/wikiで始まらないとき RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] #DocumentRoot配下の index.php を開く RewriteCond %{REQUEST_URI} ^/wiki #リクエストURIが/wikiで始まるとき RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /wiki/index.php [QSA,L] #DocumentRoot配下のwikiの下のindex.php を開く
リクエストURIには、https://domain.com/wiki/ のドメイン以下が入ってくるので、/wiki…以下が入ってくるパラメータです。
“RewriteCond %{REQUEST_URI} !^/wiki” で/wikiが入っているときと入っていないときのindex.phpの指定を変えることで、Wordpressの下にwikiを設置することが可能となります。
その場合、wiki配下はWordpressの認証範囲外で、誰でも別途アクセスが可能になるのでセキュリティ上注意が必要です。