これは私がやったことです。
移動つのゲートウェイファイル
scripts/
prepend.php
a.php
b.php
public_html/
gateway.php
html files
css files
js files
を除いて、パブリックフォルダのうちPHPファイルは、私はgateway.php
に私のPHPスクリプトのためのすべての要求をリダイレクトするための.htaccess を使用しています。このファイルは残りの部分を処理します:a.php
を取得するには、ブラウザはURLを要求する必要があります/php/a
。 /php/b
は
RewriteEngine On
RewriteBase/
RewriteRule ^php/(.*) gateway.php?file=$1.php [END,QSA,NC]
END
は、より多くのリダイレクトルールを探して停止することを意味します... b.php
に転送されます。 NC
は、大文字と小文字を区別しない一致を意味します。 QSA
は、リダイレクト先に問合せパラメータがある場合は、それを添付することを意味します。
php.ini
には、auto_prepend_file
がscriptsフォルダ内のファイルを指すように設定されています。このファイルはすべてのPHPスクリプトの前に実行されるので、私はそれを使っていくつかの設定を行うことができます。一部には、許可されたPHPスクリプトのリストがあります。
prepend.php
//the only scripts that will be allowed to run (besides gateway.php)
Const SAFE_SCRIPTS = '"/path/to/gateway.php","/path/to/a.php" ...';
Const SCRIPTS_PATH = __DIR__; //this file should be in the scripts directory
//block unnknown files. This will prevent a malicious file from running
$file = $_SERVER['SCRIPT_FILENAME'];//should be /path/to/gateway.php
if(strpos(SAFE_SCRIPTS,"\"$file\"")===false) {http_response_code(404);exit;}
gateway.phpは、要求されたPHPファイルが許可リスト上と右のファイル
//get the file requested. Comes from the htaccess rule
$file = SCRIPTS_PATH.'/'.$_GET['file'];
//if file is not in the allowed list, abort
if(strpos(SAFE_SCRIPTS,"\"$file\"")===false) {http_response_code(404);exit;}
//load the file that will handle the request
require SCRIPTS_PATH.'/'.$file;
に要求を転送するのであることを確認することを担当しています
私の設定はやや複雑ですが、あなたはそのアイディアを得ています。私のスクリプトを公開Webフォルダの外に保ちます。
なぜあなたは 'ルート' 1レベルの上部を移動しないのですか?したがって、 'public_html'と同じレベルになります。私はこの方法でファイルにアクセスできないと思う(サーバーの設定方法に依存する) –
その後、Javascriptにスクリプトを公開してデータを投稿する方法が必要になる – BeetleJuice
JSはそのような方法でファイルにアクセスできない、 それをできる? – Forget