人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

.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)をアクセス禁止にしたいです
よろしくお願い致します


●質問者: daina400
●カテゴリ:ウェブ制作
✍キーワード:.htaccess HTML ON PHP アイテム
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● y-kawaz
●23ポイント

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

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...

◎質問者からの返答

ありがとうございます

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のファイルは通常ディレクトリのおおよそどこに置けば安全でしょうか?

よろしくお願い致します


2 ● b-wind
●23ポイント

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 などの形式でアクセスできる以上、

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

◎質問者からの返答

ありがとうございます

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

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


3 ● b-wind
●22ポイント

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

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

Apache module mod_rewrite


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

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


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

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

◎質問者からの返答

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

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のファイルを隠せるのかなぁと思いまして

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


4 ● reportking
●75ポイント

.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

◎質問者からの返答

ありがとうございます

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ