2015-04-21 5 views
2

У меня есть много сайтов на моем веб-сервере.Перенаправить точно нулевую строку запроса

Я просто хочу, чтобы перенаправить все мои сайты, когда URL именно /?

Например:

  • www.example1.com/?
  • www.example2.com/?

но не как www.example.com/x.php?, www.example.com/ или что-нибудь остальное.

Я пробовал много вещей, но не удалось:

RewriteCond %{QUERY_STRING} ^$ 
RewriteRule^%{REQUEST_URI}?_test [L,R=302] 

RewriteCond %{QUERY_STRING} ^\?$ 
RewriteRule^http://www.example.com [L,R=301] 

RewriteCond %{REQUEST_URI} =="/?" 
RewriteRule ^(.*)$ http://www.example.com/ [L,R=301] 

ответ

0

Вы можете использовать следующие коды для этого сделать.

RewriteEngine On 
RewriteRule ^\?$ http://www.example.com/ [L,R=301] 

Вы определяете правило как начинается с? и заканчивается этим знаком.

+1

RewriteEngine На RewriteCond% {REQUEST_URI} = "/" RewriteRule^(. *) $ Http://www.example.com/$1 [L, R = 301] это сработало для меня sagolasin kardesim –

+0

@Huseyin '^ \? $' - это никогда не будет соответствовать в 'RewriteRule' _pattern_, поскольку литерал'? '(Вопросительный знак) не является частью URL-пути, с которым соответствует' RewriteRule' _pattern_. Соответствующий URL-путь исключает строку запроса, включая префикс '?'. – MrWhite

+0

@ MustafaMarsliTopaloğlu Если '?' Является буквальным вопросительным знаком в запросе, то '% {REQUEST_URI} =" /? "' Никогда не будет совпадать?Переменная сервера 'REQUEST_URI' Apache не включает символ'? '- означающий начало строки запроса. Чтобы соответствовать запросу для пустой строки запроса (например, '/?'), Вам нужно будет сопоставлять с 'THE_REQUEST'. – MrWhite

0

Чтобы перенаправить пустую строку запроса (то есть, когда URL-адрес просто заканчивается ?), вам необходимо проверить его на THE_REQUEST.

Шаблон RewriteRule соответствует URL-адресу, что исключает строку запроса (включая ?).

REQUEST_URIсервер переменная также опускает строку запроса и любые завершающие ?. (Обратите внимание, что это отличается от $_SERVER['REQUEST_URI'] переменных в PHP, который делает включает полный запрос URL.)

И переменная QUERY_STRING пуст, независимо от того, завершающей ? присутствует или нет.

Таким образом, для того, чтобы удалить заднюю ? от конца URL, вы можете сделать что-то вроде следующего (т.е. перенаправления.):

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ (.+)\?\ HTTP/ 
RewriteRule^%1? [R,L] 

Задний ? на конце RewriteRule Замена (%1?) фактически не присутствует в результирующем URL-адресе, но требуется для того, чтобы удалить строку запроса целиком. С другой стороны, если вы находитесь на Apache 2.4+ вы можете использовать QSD (строка запроса Отклонить) флаг вместо:

RewriteRule^%1 [R,L,QSD] 
Смежные вопросы