2025/04/05(土)サイトURLのサブフォルダ名

adsense-64.png

サイトURLのサブフォルダ名を表示させたくないと思い、少し調べてみました。
下の画像の「/ad」を.htaccessのRewriteRuleで表示させないようにします。

subfolder.png


このサイトはadiaryというCMSを使っていて、記述の仕方はマニュアルに書かれていました。

mod_rewriteの設定

サイトのディレクトリ構成にあわせて記述した内容は以下の通り。

・.htaccessの内容
RewriteEngine On
RewriteRule  ^ad/ - [L]
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteRule  ^(.*)$ ad/$1
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteRule  ^ad/(.*)$ ad/adiary.cgi/$1 [L]

内容がよく分からなかったのでChatGPTに聞いてみました。
このコードは、Apacheの.htaccessファイルなどで使われる**mod_rewrite(URLの書き換え)**の設定です。
以下にそれぞれの行の意味をわかりやすく説明します:

🔧 全体の目的
このルールは、adiary.cgiというCGIスクリプトにリクエストを転送することで、静的なURLを使っても内部的にはCGIが動くようにする構成です。

1. RewriteEngine On
URLの書き換え(mod_rewrite)を有効にする。

2. RewriteRule ^ad/ - [L]
ad/ で始まるURLパスには書き換えを行わない。
[L] は「このルールが適用されたら、以降のルールは無視する」ことを意味します。

例: /ad/index.html → そのまま通す(書き換えしない)

3. RewriteCond %REQUEST_FILENAME !-f
次のルールを適用するのは、「実在するファイルではない」とき。

4. RewriteRule ^(.*)$ ad/$1
実在するファイルでない場合、ad/ディレクトリの中にリダイレクトする。

例: /blog → ad/blog にリライト(ただし blog というファイルがなければ)

5. RewriteCond %REQUEST_FILENAME !-f
再び「ファイルが存在しない」ことを確認。

6. RewriteRule ^ad/(.*)$ ad/adiary.cgi/$1 [L]
ad/以下のパスがファイルでなければ、ad/adiary.cgi/パス に内部転送する。
[L] は、これが最後のルールであることを示します。

例: ad/blog/2023 → ad/adiary.cgi/blog/2023 に内部転送

🧠まとめると:
/blog → ad/blog → ad/adiary.cgi/blog
ただし、すでにファイル(例: ad/index.html)が存在する場合はそれを表示
やりたいことはできたので良いのだけど、ChatGPTの回答は半分くらいしか分かりません。