タグ:htaccess

ベーシック認証解除

ベーシック認証をかけると、そのフォルダ以下すべてその影響を与えます。
特定のフォルダで解除するためには、そのフォルダにすべてのアクセスを許可する命令を書いたhtaccessを入れる必要があります。

なんとなく
Order allow,deny
Allow from all
と書けばいけそうな気がしますが、これでは許可してもらえません。
正確には以下のように記述します。

Satisfy Any

これだけ。
これでそのフォルダ以下はアクセス可能となります。

■追記

この記事の作成・編集中、
Require valid-user
Order allow,deny
Allow from all
Satisfy Any

とかいろいろと書きましたが、上記に書いているように
Satisfy Any

だけで大丈夫です。

nandani | 2010年07月18日 | コメント(0) | トラックバック(1) | サーバー関連

RewriteCond %{REQUEST_FILENAME}の衝撃

htaccessで「RewriteEngine on」にしたときよく
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 
て言う記述をつけることがあります。
これは、実際にファイル(-f)やフォルダ(-d)がある場合は、リライトルールを適用しないという意味ですが、何か効いてない。
これまで特に運営上問題がなかったので放置してたんですが、ぼちぼちと問題が発生し始めまして、なんとかしなきゃなぁと思っていたところ、このような記事を発見!
 
どうやら
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
の直後に書いてあるルールしか無効にできないらしい。
 
つまり
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^news\.html$ news.php [L]
RewriteRule ^event\.html$ event.php [L]
RewriteRule ^list\.html$ list.php [L]
RewriteRule ^(.*).html$ index.php?name=$1 [L]
と書かれている場合、newsには影響を与えても、それ以下には影響を与えないというわけです。
 
どうりで効いてないはずだ。
そもそも記述場所が間違ってるんだもんね~。
RewriteRule ^(.*).html$ index.php?name=$1 [L]
の部分だけ影響を与えればいいので
RewriteRule ^news\.html$ news.php [L]
RewriteRule ^event\.html$ event.php [L]
RewriteRule ^list\.html$ list.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*).html$ index.php?name=$1 [L]
とすれば解決!
 
なんだかなぁ・・・

nandani | 2010年07月18日 | コメント(0) | トラックバック(0) | サーバー関連

Copyright(c) 2010 - 2017 ダリの雑記