質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

1回答

4823閲覧

.htaccessを使って特定のファイルへのアクセスだけは許可したい

takujiji

総合スコア24

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

1クリップ

投稿2018/11/20 09:35

社内用のシステムが有り、社外からのアクセスを禁止しようと考えています。
そのため、.htaccessに下記のような設定をしました。

order deny,allow deny from all allow from 111.111.111.111

ですが、このシステムの中には APIのプログラムも運用されており、不特定多数のサーバからのアクセスがあります。

APIにアクセスする際の URLは下記のような感じになります。
http://example.com/api?code=******

そのため、その APIへのアクセスだけは許可したいと思い、下記のように設定しました。

<Files ~ "^(?!api).*$"> order deny,allow deny from all allow from 111.111.111.111 </Files>

ですが、<Files .....>の設定に関係なく APIからはアクセスが拒否されている状態です。
正しくはどのように設定すればいいものでしょうか?

環境は Apacheです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2018/11/20 10:01

api は、ファイルがありますか?
takujiji

2018/11/20 10:06

大変失礼いたしました。 システム自体は CakePHPで開発していますので、APIにはファイル実態がありません。 「/Controller/testsController.php」の中の「api」というアクションがあります。 また、「/Config/routes.php」で「Router::connect('/api', array('controller' => 'tests', 'action' => 'api'));」の設定をしています。
guest

回答1

0

ファイル実体がないURLにはFilesディレクティブは使えないのでLocationディレクティブを使います。
ただし、Locationディレクティブは.htaccessでは書けないので、httpd.confに書きます。(要再起動)

マッチしないものだけ拒否、とすると話がややこしくなるので、
まず全体を拒否し、「api」だけを許可するという方針にします。

CakePHPで例えば以下の様なURLの書き換え(mod_rewite)が起こるので、
/api?code=xxx/index.php?url=api...
書き換えられた方のURL(index.php)も許可する必要があります。
(CakePHPは詳しくないので、書き換えルールが上記の通りでなかったらすみません
上記は例ということで、参考にしてください。)

以上の方針で書いたものが下記になりますので、
ご自身の環境に合わせて適宜修正してください。

httpd.conf

1httpd.conf の他の同様の記述よりも下の方に書いてください。 2<Location "/"> 3 Order deny,allow 4 Deny from all 5 Allow from 111.111.111.111 6</Location> 7 8# 許可したいURL 9<Location "/api"> 10Order deny,allow 11Allow from all 12</Location> 13 14# 書き換えられたURLも許可 15<Location "/index.php"> 16Order deny,allow 17Allow from all 18</Location>

index.php?url=fooの形式で手打ちすると、
「api」以外のCakePHPの他のURLもアクセスされてしまいますが
それでよければ参考にしてください。
その辺がまずければ、ご自身でアレンジしてみてください。

投稿2018/11/21 06:45

taka-saan

総合スコア665

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問