0

以下のhtaccessコードでphpファイルのファイル名を書き換えます。

ErrorDocument 404 /notfound.html

AddType application/x-httpd-php .cgi
RewriteEngine on 
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [F,L]
RewriteRule ^(.*)\.cgi $1\.php 

やりたいこと: php ファイルへのアクセスも制限できますか? たとえば、訪問者page.phpが 404 エラーを取得し、ページを表示したい場合に、main.cgiエラーなしでページを表示することは可能ですか?
htaccess だけでこれを行うことができない場合、最善の解決策は何ですか?

4

1 に答える 1

1

index.phpファイルにphpファイルを含めるよりも、パブリックフォルダーの外にphpファイルを置くことで目的を達成できます。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [F,L]

そしてindex.phpでは次のようなもの

$validFiles = array('page', 'about', 'gallery');

$requestedFile = str_replace('.cgi', '', trim($_SERVER['REQUEST_URI'], '/');

if(in_array($requestedFile, $validFiles ))
{
    // ../ goes into the parent folder, and code is a sibling of your public folder
    include '../code/'.$requestedFile.'.php';
}
else
{
    // file not found stuff or index here
}

なぜ.cgi拡張子を使用する必要があるのか​​疑問に思いますが、それはホストと関係がありますか、それともレガシー要件ですか?htaccessを使用すると、次のようなクリーンなURLを使用できるためです。

mydomain.com/products/widget/

于 2012-12-08T14:53:56.060 に答える