mod rewrite и знак вопроса в УРЛ

12
V
На сайте с 30.09.2004
Offline
144
2600

Есть не совсем типичная ситуация.

Нужно - при обращении к сайту по УРЛ со знаком вопроса (site.com?ddddd) - чтобы давало или 404, или УРЛ - до знака вопроса 301 редиректом.

НО сама страница имеет инклуды, где вызывается пара страниц с параметром page.php?pas=44

Нужно, чтобы инклуды работали, но в УРЛ знак вопроса с переменными не работал.

Как это можно сделать?

Нашел:

RewriteBase /

RewriteCond %{QUERY_STRING} ^.+$

RewriteRule (.*) ----.html [L]

но при этом не работают инклуды, а надо бы...

C
На сайте с 04.02.2005
Offline
277
#1

Нужно проверять get параметры на валидность

Это хорошо что вы знаете какие у вас есть get праметры

А теперь представьте что не знаете?

А ведь запрос (site.com?ddddd) вполне валидный

iren K
На сайте с 28.12.2008
Offline
222
#2
Vodoleev:

Нужно - при обращении к сайту по УРЛ со знаком вопроса (site.com?ddddd) - чтобы давало или 404, или УРЛ - до знака вопроса 301 редиректом.

возможно вам нужно банально убрать сессии - что-то типа

php_flag session.use_only_cookies On

php_flag session.use_trans_sid Off
c уважением Iren
siv1987
На сайте с 02.04.2009
Offline
427
#3

В принципе никак. Либо сделать исключение для этих пару страниц, либо в инклудах добавить дополнительный параметр &include, и проверять его наличие перед редиректом.

---------- Добавлено 08.10.2012 в 15:51 ----------

Хотя.. ип адрес же при инклуде должен быть локальным, его и проверяйте.

RewriteCond %{QUERY_STRING} !^$

RewriteCond %{REMOTE_ADDR} !^server_ip_adress$

RewriteRule (.*) /$1? [R=301,L]

chab4
На сайте с 10.01.2011
Offline
97
#4

Так попробуйте:

RewriteCond %{QUERY_STRING} ^pas=*$ [NC]

RewriteRule ^page\.php$ http://www.site.com/page.php? [R=301,L]

Lemarbet (http://lemarbet.com/) — успешные кейсы развития интернет-магазинов.
IL
На сайте с 20.04.2007
Offline
435
#5
Vodoleev:
НО сама страница имеет инклуды, где вызывается пара страниц с параметром page.php?pas=44

Я правильно понимаю?

include 'http://...?pas=44';
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
V
На сайте с 30.09.2004
Offline
144
#6

Да, в шаблонах страниц есть вызовы типа

<!-- include virtual=/file.php?pas=44 --!>
и они должны работать.
Либо сделать исключение для этих пару страниц

А вот вариант. Как сделать такое исключение? В .htaccess? Т.е. какими командами?

website
На сайте с 25.02.2011
Offline
30
#7

RewriteRule ^page.html$ page.php?pas=$1 [L]

будет редирект на страницу page.html но с переданным параметром pas

в page.php делаете проверку

if(isset $_POST['pas']){

...

}else{

...

}

И дай вам Бог того вдвойне, чего желаете вы мне!
AH
На сайте с 18.03.2006
Offline
204
#8
website:
RewriteRule ^page.html$ page.php?pas=$1 [L]

будет редирект на страницу page.html но с переданным параметром pas

в page.php делаете проверку

if(isset $_POST['pas']){
...
}else{
...
}

Так работать не будет, так как не определен pas=$1

Правильно будет так:

RewriteRule ^page_([^(.*)]*)\.html$ page.php?pas=$1

Цены на регистрацию доменов ( https://1reg.online/domains.price ).
T
На сайте с 19.09.2012
Offline
29
#9
website:
if(isset $_POST['pas']){

вместо $_POST я бы проверял $_GET или $_REQUEST.

по-моему, параметры из query string не должны попадать в $_POST.

AH
На сайте с 18.03.2006
Offline
204
#10
turen:
вместо $_POST я бы проверял $_GET или $_REQUEST.
по-моему, параметры из query string не должны попадать в $_POST.

В указанном выше случае POST работать не будет, так как параметры передаются через GET.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий