PHPのquery_stringの処理
-
11-12-2019 - |
質問
.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]
so / 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
}
解決
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"]
を使用して動作を決定する方法を決定できます。これはフロントコントローラのパターンの実装です。>
さらに、index.php
がApacheによって見つからない場合、要求はreserve.php
に転送されます。
しかし、このような冗長性の建物は必ずしもそうすることは必ずしもそうではありません(reverty.phpも欠けているのは何がありますか?)。index.php
に対する適切なアクセス制御を強制することはおそらくより良いアプローチです。