1

Webサイトのクエリ文字列パラメータを割り当てたものに制限することはできますか?そうすることで、承認済みリストにないクエリ文字列パラメーターを含むURLを404ページにリダイレクトできますか?

たとえば、クエリ文字列パラメータとして「?s =」と「?p =」のみを許可したいので、www.mysite.com/?x=whateverアクセスすると、サイトはそのユーザーに404ページをリダイレクトします。その場合www.mysite.com/?s=whatever、サイトは適切なコンテンツを表示します。

4

4 に答える 4

2

.htaccessでそれを行いたい場合は、次のようにすることができます。

RewriteCond %{REQUEST_URI} !(s=(.*)|404.html)
RewriteRule .* 404.html [R=404,L]

また、?s =のページを動的に生成する必要があるため、index.php(または使用しているスクリプト)の例外を作成してください。

RewriteCond %{REQUEST_URI} !(^s=(.*)|404.html|index.php)
RewriteRule .* 404.html [R=404,L]

テストはしていませんが、これは機能するはずです。

PHPでそれを実行したい場合は、$ _ GET変数を確認し、?s=がない場合は404ページをリダイレクトまたは表示します。

if (!(isset($_GET['s'])) {
    header('HTTP/1.0 404 Not Found');
    header('Expires: Thu, 19 Nov 1981 08:52:00 GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, private');
    readfile('404.html');
    exit;
}

あなたはポイントを取得します。

于 2011-10-21T14:05:28.830 に答える
1

をチェックして$_GET、許可されていないパラメータがあるかどうかを確認してから、404ページにリダイレクトしてください。

于 2011-10-21T13:55:12.347 に答える
1

Apacheでは、mod_rewrite...を次のように使用できます。

RewriteEngine On
RewriteCond %{QUERY_STRING} ^x=(allowed_values_of_x)$
RewriteRule ^path/in/uri$ /redirect/to/file?withquery=%1 [L]
RewriteCond %{QUERY_STRING} ^x=(.*)$
RewriteRule ^path/in/uri$ /redirect/to/404?withquery=%1 [R=404,L]

の値xが有効な場合は、有効なパラメーターを持つファイルにリダイレクトされxます。そうでない場合は、無効なパラメーターを持つ404ハンドラーにリダイレクトされxます(必要に応じて、何か凝ったことができます)。

次のApachemod_rewrite条件を見てください:http: //httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond

于 2011-10-21T14:01:26.667 に答える
1

次のような許可されたクエリ文字列パラメータのリストを作成します。

$allowed_parameters = array( 's', 'q' );

$ _GET配列に許可されているキー以外のキーが含まれている場合は、ユーザーをリダイレクトします。

foreach ( $_GET as $key => value ) {
    if ( ! in_array( $key, $allowed_parameters ) ) {
        header( "Location: http://www.mysite.com/error404.html" );
        exit;
   }
}

exit処理をすぐに停止するために使用します。これがないと、残りのすべての配列キーが処理された後にリダイレクトが発生します。

于 2011-10-21T14:02:10.913 に答える