.htaccessで


http://XXXXXX.com/item/アイテム番号.html

RewriteEngine on
RewriteRule ^item/([0-9]+).html+ item.php?c=$1

こういう書き換えをしましてこのitem.phpだけをアクセス禁止にする場合には
どうしたらいいのか教えて欲しいです

例えば
(1)http://XXXXXX.com/item/250.html
(2)http://XXXXXX.com/item.php?c=250

があるとすると(1)だけをアクセス許可にして(2)をアクセス禁止にしたいです
よろしくお願い致します

回答の条件
  • 1人5回まで
  • 登録:2008/01/11 22:54:21
  • 終了:2008/01/12 16:58:58

回答(4件)

id:y-kawaz No.1

y-kawaz回答回数1421ベストアンサー獲得回数2262008/01/11 23:41:19

ポイント23pt

直観的に書くと以下のようなルールを作りたいということですか?

RewriteEngine on
RewriteRule ^item\.php - [F]
RewriteRule ^item/([0-9]+).html+ item.php?c=$1

でもこれだと書き換え後の内部リクエストも最初のRewriteRuleに引っかかって全部拒否されてしまうので困っている、という理解であっていますでしょうか?


少し調べたところ書き換え後のリクエストなのかどうかを判断できる変数などが見つからなかったんのですが、THE_REQUEST という特殊変数を使うことで以下のような形で実現できました。

RewriteEngine on
RewriteCond %{THE_REQUEST} "^[a-zA-Z]+\s+/item\.php"
RewriteRule . - [F]
RewriteRule ^item/([0-9]+).html+ item.php?c=$1

THE_REQUESTはブラウザが送ってきた完全なリクエストを "GET /index.html HTTP/1.1" といった形で参照できる変数です。

GETやPOSTなど全てのメソッドに対応し、メソッドとアクセス先のファイルパスの間の空白を2文字にしたりといった小細工されたリクエストにも出来るよう上記のような正規表現にしてみました。

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#RewriteCon...

id:daina400

ありがとうございます

RewriteEngine on

RewriteCond %{THE_REQUEST} "^[a-zA-Z]+\s+/item\.php"

RewriteRule . - [F]

RewriteRule ^item/([0-9]+).html+ item.php?c=$1

でしてみたのですが

http://XXXXXX.com/item.php?c=250

でアクセスできてしまいました。このアドレスitem.phpのファイルだけはアクセス禁止にしたいです

http://XXXXXX.com/item/250.html

はアクセス許可にしたいですができますでしょうか?

もしできなければitem.phpのファイルは通常ディレクトリのおおよそどこに置けば安全でしょうか?

よろしくお願い致します

2008/01/12 00:42:16
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402008/01/12 09:16:38

ポイント23pt

Apache module mod_rewrite

RewriteEngine on
RewriteRule ^item/([0-9]+).html+ item.php?c=$1 [L]
RewriteRule ^item/item.php$ - [F,L]

こんなとこ?


もしできなければitem.phpのファイルは通常ディレクトリのおおよそどこに置けば安全でしょうか?

何に対して安全にしたいのかよくわからないけど、どこにおいても /item/250.html などの形式でアクセスできる以上、

あまり変わりは無いと思いますが。

id:daina400

ありがとうございます

試してみましたが当方がやりたいことは少し違います

安全というのはitem.phpのファイルだけをアクセス禁止にしたいのですが

2008/01/12 10:27:03
id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402008/01/12 10:56:05

ポイント22pt

とりあえず、記述ミスがあったので再回答。

RewriteEngine on
RewriteRule ^item/([0-9]+).html+ item.php?c=$1 [L]
RewriteRule ^item.php$ - [F,L]

Apache module mod_rewrite


試してみましたが当方がやりたいことは少し違います

どう違ったか教えてもらえるとありがたいんですが。


安全というのはitem.phpのファイルだけをアクセス禁止にしたいのですが

そういう URL を見せたくないということならわかるんですが、それは「安全」とは違う内容なので先の疑問になりました。

id:daina400

ありがとうございます。先ほど記述して貰いました

RewriteEngine on

RewriteRule ^item/([0-9]+).html+ item.php?c=$1 [L]

RewriteRule ^item.php$ - [F,L]

で試しましたが

(1)http://XXXXXX.com/item/250.html

(2)http://XXXXXX.com/item.php?c=250

(1)、(2)両方アクセス禁止になりました

これを(2)だけアクセス禁止にしたいです

(1)はアクセス可能にしたいです

.htaccessではそういう制御は可能でしょうか。無理であればphpのファイルを隠したいので

どのディレクトリにおけばいいのかなと思いまして

例えば

RewriteEngine on

RewriteRule ^item/([0-9]+).html+ /a/b/c/d/e/item.php?c=$1 [L]

こういう風にすればphpのファイルを隠せるのかなぁと思いまして

当方の説明が分かりずらく申し訳ありません

2008/01/12 13:05:18
id:reportking No.4

reportking回答回数2ベストアンサー獲得回数02008/01/12 15:58:54

ポイント75pt

.htaccessを使わないで考えたらいかがですか?

1.$_REQUEST[c]が取得できない場合

2.アクセスされたURLにitem.phpが含まれている場合

この2つを表示させたくないのではないでしょうか?

それであれば、

上記2つの場合にアクセスをされたときにヘッダー送信をして、

TOPに戻せばいいのではないでしょうか?

if($_REQUEST[c] =="" || substr_count($_SERVER[REQUEST_URL],".item.php")){

header("Location http://a.com/");

}

これをitem.phpの頭に記述してはいかがですか?

http://codezine.jp/a/article/aid/1096.aspx

id:daina400

ありがとうございます

フォークボールを投げられた感じです

また皆様ありがとうございました

2008/01/12 16:58:10

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません