.htaccessを使ってルート階層以外でもルートパスを使えるようにしたかった
2018.04.26
※タイトルからお察しかもしれませんが、最終的に実現はできませんでした。
が、何かの参考になるかもと思い記事に残しています。


ルートパスでのファイル指定はとても便利ですが、ローカル環境やテストディレクトリで確認することができません。
そこで以下のようにできないか調べてみました。

・ /hoge/ 配下でルートパス指定をしたときは /hoge/ をドキュメントルートとする
・ それ以外のルートパス指定では、通常通り / をドキュメントルートとする


■.htaccessでリダイレクト

「特定の階層下では/○○○/をドキュメントルートとみなす」のような簡潔な設定を何かでできるのではと考えていたのですが...
調べた限りそういうものはなさそうだったので、リダイレクトで似たようなことができないかと考えました。
つまり、/hoge/ 配下でのルートパス指定は全て、

/css/common.css → /hoge/css/common.css

のように /hoge/ 配下の同階層にリダイレクトさせられれば、/hoge/ がドキュメントルートになったような動作になるのでは、という感じです。


ということで、.htaccessに以下のように記述しドキュメントルートに設置しました。

------------
Options +SymLinksIfOwnerMatch
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_REFERER} /hoge/  ← 条件:リンク元のURLが /hoge/ 配下
RewriteCond %{REQUEST_URI} !/hoge/  ← 条件:リクエスト先のURIが /hoge/ 配下以外
RewriteRule ^(.*)$ hoge/$1 [L,R]
------------

上2つが条件で、両方を満たすときにリダイレクトがかかります。

これで、例えば /css/common.css にアクセスがあった際、それが /hoge/ 配下のページからのリクエストだった場合は /hoge/css/common.css にリダイレクトされるはずです。


■画像やCSSはできた

画像やCSSなどの読み込みは上手くいっているようです。
ルートパス指定をしたものは /hoge/ を基準にして参照してくれています。
aタグのリンクもルートパス指定で正しく動いているようでした。

が、SSIがダメでした。。。

SSIはリダイレクトが効かず、書かれた通りのパスを参照してしまいます。
(もしかしたら他にも効かないものがあるかもしれませんが)

in an SSI include, can the file being included be redirected in an .htaccess file

こちらで似たような内容のやりとりがされていますが、
SSIはApacheにリクエストを戻さないのでリダイレクトされない、ということのようです。

なんとかSSIの読み込み先を変えられないか探してみましたが、.htaccessではどうにもならなそうで。。


ということで、
もともとSSIを使ったサイトをサブディレクトリでも確認できるようにするための施策だったので、この方法は一旦諦めることに。
もし良い方法が思いつきましたらまた記事にしたいと思います。

| コメント(0)
BASIC認証を指定したファイルにかける
2013.07.02
BASIC認証を、階層ではなく1つのファイルに対してかける方法です。

1. 目的のファイルがある階層に対してBASIC認証をかける

2. .htaccessに手を加える
.htaccessの中は下記に近いものになっていると思います。

AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
AuthName "Protected Area"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>

これを次のようにタグで囲みます。

<Files sample.html> ← 目的のファイル名に
AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
AuthName "Protected Area"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>
</Files>

この状態でアップすれば完了。
| コメント(0)
携帯サイトでXHTMLを使う
2010.01.28
携帯サイトの制作にXHTMLを使ったのですが(cssを使うため)、
MTで書き出していたので文字コードはUTF-8でした。
あまりない状況かもしれませんが、そのときに躓いたところを
メモしておこうと思います。

※ちなみに頼りの綱だったMT-I18NプラグインはMT5未対応でした。。
※2010.5.20 追記
I18NHelperというプラグインなら動くとの情報を頂きました。
タグを書くときは文字コード指定の大文字/小文字に注意です!



| コメント(6)
SSIを「.html」で動かす方法
2010.01.08
SSIは拡張子を.shtmlにしないと動かない場合が良くありますが、.htmlでも動かしたい場合は、htaccessで設定できます。

記述することは以下の1行(文末改行)
------------------
AddType text/x-server-parsed-html .shtml .html .htm
------------------

ファイル名: .htaccess

そして動かしたい階層に上げるだけですeye
| コメント(0)