WordPressなどのPHPサイトの下にpukiwikiを構築

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 に転送されて処理されている場合が多いです。
どのように実現しているかというと、

.htaccess

  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php [QSA,L]

これは何が書いてあるかというと、RewriteCond でファイルではない場合、どのURLであっても、index.php に行きなさい。と書いてあります。

これが書いてあると、たとえ/wiki/のようなフォルダを作りhtmlを設置して、ブラウザからアクセスしても、すべて index.php に行ってしまいフォルダ内のhtmlが開けないこととなります。

2.対処方法

対処方法は簡単で、該当のURIが入ったときだけ処理を切り分ければ良いです。

.htaccess

  RewriteEngine 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の認証範囲外で、誰でも別途アクセスが可能になるのでセキュリティ上注意が必要です。

 

コメントを残す

メールアドレスが公開されることはありません。