1

.htaccess経由で別のファイルにクエリを送信することは可能ですか?少し説明します:

index.phpは、次のようにすべてのページを処理します。

switch($page) {
    case 'index':
        require_once START . '/includes/pages/index.php';
    break;

    case 'another':
        require_once START . '/includes/pages/another.php';
    break;
       and so on...

.htaccessの場合:

RewriteRule ^index$ index.php?page=index [L]
RewriteRule ^another$ index.php?page=another [L]

リンク(例:localhost / 84ss7d41):

RewriteRule ^(.*)$ index.php?QUERY_STRING=$1 [L]

したがって、 /includes/pages/ index.phpで:

if ($_GET['QUERY_STRING']) {
$_SERVER['QUERY_STRING'] = $_GET['QUERY_STRING'];
$query_string = check_input($_SERVER['QUERY_STRING']);
    //checking/validating processing further...

このようなリンクをlocalhost/84ss7d41と同じように機能させるには、 index.phpを使用しないでください。何かが起こった場合(ファイルが誤って削除された場合)に「プロジェクト」を分離しようとしています。メインスクリプトがなくても、データのチェック/検証は同じように機能します。次のようになります。

if (main project file index.php/ || /includes/pages/index.php doesn't exist) {
  check/validate data with reserve.php
}
4

1 に答える 1

1
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule ^(.*) /index.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) /reserve.php [L]

これにより、既存のファイル(画像など)と一致しないすべてのリクエストがにリダイレクトされindex.php、そこで操作$_SERVER["REQUEST_URI"]方法を決定できます。これは、フロントコントローラーパターンの実装ですhttp://en.wikipedia.org/wiki/Front_Controller_pattern

さらに、index.phpapacheで見つからない場合、リクエストはに転送されますreserve.php

ただし、この種の冗長性を組み込むことは、必ずしも「正しい」ことではありません(reserve.phpも失われた場合はどうなりますか?)。適切なアクセス制御を実施することindex.phpは、おそらくより良いアプローチです。

于 2012-03-15T23:14:51.873 に答える