1

私は次のようなフォルダ構造を持っています

Controller
  |_check.php

View
  |_  .htaccess
  |_ index.php
  |_  Webroot
          |_ js
              |_common.js
.htaccess    

.htaccessで

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ View/    [L]
   RewriteRule    (.*) View/$1 [L]
</IfModule>

ビュー/.htaccessで

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

外側の.htaccessファイルはViewフォルダーにView/.htaccessリンクし、そこにindex.phpにリンクします。

index.php(ファイルを表示)にajaxtoのボタンがありますcheck.php

common.jsに対応するajax関数のURLを次のように指定しました

var url = 'check.php'; // OR '../Controller/check.php'

問題は、ajaxが2つのURLで正しく機能していないことです。

フォルダー構造を変更して修正する必要があるのか​​、それともアクセスするためにhtaccessファイルを変更する必要があるのcheck.phpか​​。

4

2 に答える 2

2

フォルダ構造の問題ではなく、htaccess の書き換えルールが間違っています。

「ルート」のhtaccessは、すべてのリクエストをViewフォルダーにリダイレクトします(デフォルトはindex.phpだと思います)

あなたが何を達成しようとしているのか理解できません。説明していただければ、お役に立てるかもしれません。

現在の設定では、View/index.php 以外のファイルにアクセスできません (GET 引数の URL を渡しても)

編集:

その場合、アクセス可能な唯一のファイルを View/index.php にして、強制的に View/index.php ファイルを通過させたい場合は、PHP セッション変数を使用できます。

このようなもの...

あなたのview.phpファイルの一番上に:

   session_start();
   $_SESSION['viewCheck'] = true;
   //rest of view.php code

check.php コード (または AJAX 経由でアクセスしようとしているファイル)

session_start();
if (isset($_SESSION['viewCheck']) && $_SESSION['viewCheck'] === true) {
    //Code of check.php
} else {
    //Error message or redirect to view.php, for instance

    //error message example
    header('HTTP/1.0 401 Unauthorized');

    //Redirect example
    header("Location: http://www.yourhost.com/View/index.php");
}

注 1: htaccess ファイルの書き換え規則を削除する必要があります。

注 2: 以下の理由から、これは防弾ではない (なりすましの可能性がある) ことに注意してください。

  1. 誰かが View/index.php にアクセスすると、check.php に自由にアクセスできます。これは、ajax リクエストの後にセッションが強制終了された場合に軽減できます。ajax リクエストが 2 つのリクエストで構成されている場合、たとえば 1 つが 10 秒で期限切れになるセッション キーを取得し、そのキーを使用して check.php から結果を取得する場合に、これを実現できます。

  2. セッションもスプーフィングされる可能性があります (詳細はこちらを参照)

于 2012-07-29T15:47:13.080 に答える
1

「View」フォルダにドメインのパスを設定して、誰もコントローラなどにアクセスできないようにしないのはなぜですか?

これも .htaccess をいじるよりも簡単だと思います!

これは、ほとんどの PHP フレームワークが行う方法です。

また、check.php の機能にアクセスする必要がある場合は、"ajax.php" を作成して、リクエストが正常かどうかをチェックし、"check.php" を使用して結果を取得できます。

于 2012-07-29T16:46:33.267 に答える