Ограничение и перенаправление строки запроса?
Можно ли ограничить параметры строки запроса моего сайта теми, которые я выделяю. При этом я могу перенаправить любые URL-адреса с параметрами строки запроса, не найденными в моем утвержденном списке, на мою страницу 404?
Например, я хочу, чтобы в качестве параметров строки запроса были разрешены только '? S =' и '? P =', поэтому если www.mysite.com/?x=whatever
доступ к сайту перенаправит этого пользователя на мою страницу 404 - если www.mysite.com/?s=whatever
тогда мой сайт будет отображать соответствующий контент.
4 ответа
Создайте список разрешенных параметров строки запроса, например:
$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
немедленно прекратить обработку. Без этого перенаправление произойдет после обработки всех оставшихся ключей массива.
Если вы хотите сделать это с.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 и перенаправьте или отобразите страницу 404, если нет? S =:
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;
}
Вы получаете смысл.
Просто проверьте $_GET
и найдите, есть ли запрещенные параметры, затем перенаправьте на свою страницу 404.
На 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
параметр (так что вы можете сделать что-то необычное с ним, если хотите).
Посмотрите на условия Apache mod_rewrite по адресу: http://httpd.apache.org/docs/current/mod/mod_rewrite.html