Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2009, 13:14   #1
Алориан
Пользователь
 
Регистрация: 22.06.2009
Сообщений: 17
По умолчанию Apache mod_rewrite и GET переменные php

Всем привет)

Нужно скрытно добавлять ко всем php скриптам дополнительную GET переменную.

Например пользователь запрашивает скрипт index.php, а реально должен выполниться index.php?var=1. Скрипт может хоть как называться, не обязательно index.php.

Впринципе это делается довольно легко, достаточно прописать в .htaccess:
Код:
RewriteEngine on
RewriteBase /
RewriteRule ^(.+)\.php$ $1.php?var=1
После этого ко всем скриптам добавляется переменная, собственно как я и хотел, но проблема в том, что никакие другие переменные не работают.
Например, если пользователь запросит index.php?catalog=11&dir=22, то реально выполняется опять таки index.php?var=1.
Все остальные переменные просто исправляются mod_rewrite'ом.

Я пытался сделать так:
RewriteRule ^(.+)\.php?(.*)$ $1.php?var=1&$2
Но ничего не изменилось...

Кто нибудь знает как сделать так чтобы просто к стандартным GET переменным добавилась еще одна переменная без затирания предыдущих?
Ткните носом в ошибку, второй день с этой фигней сижу)
Спасибо)

update:
Сохранять переменную еще где то(в куках, запрашивать при старте из мускула, любой другой вариант), не предлагайте пожалуйста)
Во первых, это скрытная переменная нужна только в одном каталоге сайта.
Во вторых, чтобы сохранять переменную в другом месте надо сделать очень много изменений в коде.
В третьих, велика вероятность что при редактировании страниц это переменная благополучно затрется.

Последний раз редактировалось Алориан; 12.11.2009 в 13:27. Причина: update
Алориан вне форума Ответить с цитированием
Старый 13.11.2009, 03:03   #2
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Прописать общее правило для всех. Если такого нельзя создать - создавать для отдельно каждого случая. Например:
RewriteRule (.+) $1&var=1
SkyM@n вне форума Ответить с цитированием
Старый 13.11.2009, 03:03   #3
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Прописать общее правило для всех. Если такого нельзя создать - создавать для отдельно каждого случая. Например:
RewriteRule (.+) $1&var=1
SkyM@n вне форума Ответить с цитированием
Старый 13.11.2009, 09:24   #4
Алориан
Пользователь
 
Регистрация: 22.06.2009
Сообщений: 17
По умолчанию

Цитата:
Прописать общее правило для всех. Если такого нельзя создать - создавать для отдельно каждого случая. Например:
RewriteRule (.+) $1&var=1
Попробовал так, но видимо настройки на хостинге запрещают такие преобразования. Ошибка 500(внутренняя ошибка сервера). Хостинг shared, поэтому доступа к конфигам апача нет, можно только через .htaccess чего нить делать.

Само правило вроде бы правильно написано. Попробовал еще так:
RewriteRule ^(.+) $1&var=1
RewriteRule ^(.+)$ $1&var=1

Та же самая ошибка.

А делать для каждого конкертного случая это как? Если вот так:
RewriteRule ^index.php?(.+) index.php?$1&var=1
То дополнитльная переменная var=1 добавляется, но все остальные обрезаются. Или как то по другому надо? Почему они обрезаются я собственно и не могу понять)

Может быть я проверяю не правильно?
PHP код:
<?
echo $_GET["var"];
echo 
$_GET["bugoga"];
?>
Код:
RewriteRule ^index.php?(.+) index.php?$1&var=1
запрашиваю страницу index.php?bugoga=ergsdrgdgrsdrg
Получаю страницу с циферкой 1, то есть значение переменной var. То что в RewriteRule для var прописно, то и получаю.
Больше на странице ничего нет, хотя должно быть помимо циферки 1 еще и "ergsdrgdgrsdrg".
Проверяю вроде бы правильно, тут ошибиться то негде.
Алориан вне форума Ответить с цитированием
Старый 13.11.2009, 11:38   #5
krok
Клонирую людей
Пользователь
 
Аватар для krok
 
Регистрация: 22.02.2008
Сообщений: 22
По умолчанию

я не очень силен в этом но может так:

Код:
RewriteEngine on
RewriteRule ^index.php index.php?var=1&%{QUERY_STRING}
В мире нет Вечных Двигателей, зато полно Вечных Тормозов.

Последний раз редактировалось krok; 13.11.2009 в 11:41.
krok вне форума Ответить с цитированием
Старый 13.11.2009, 12:03   #6
Алориан
Пользователь
 
Регистрация: 22.06.2009
Сообщений: 17
По умолчанию

krok, эм... Нет.
Спасибо за попытку конечно, но совсем мимо)
В mod_rewrite используются регулярные выражания, а у вас я не знаю из какой области пример.
Алориан вне форума Ответить с цитированием
Старый 13.11.2009, 13:09   #7
F1ernandes
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 14
По умолчанию

А у меня ваш пример работает. Я правда не понимаю зачем так делать.... если будет передаваться заведомо известная переменная, не легче ли ее объявлять в скрипте, чем получать ГЕТ методом....
F1ernandes вне форума Ответить с цитированием
Старый 13.11.2009, 13:11   #8
F1ernandes
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 14
По умолчанию

http://www.yourtwins.ru/index.php

в .htaccess
Код:
RewriteEngine on
RewriteBase /
RewriteRule ^(.+)\.php$ $1.php?var=3
в index.php
Код:
echo $_GET['var'];
F1ernandes вне форума Ответить с цитированием
Старый 13.11.2009, 13:28   #9
Алориан
Пользователь
 
Регистрация: 22.06.2009
Сообщений: 17
По умолчанию

Нет, сама переменная var у меня тоже нормально выводится проверкой через echo.
Но вот переменная bugoga уже через echo не выводится.

Попробуйте, если она у вас тоже появится на странице, то будем пинать хостинг скорее всего.
Алориан вне форума Ответить с цитированием
Старый 13.11.2009, 13:57   #10
F1ernandes
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 14
По умолчанию

не, не выводится...
но кодом, который Вы написали в начале, по идее она и не должна выводиться

Нужно изменить на что-то типа этого:
Код:
RewriteRule ^(.+)\.php\?(.+)$ $1.php?$2&var=3
но правило написано с какой-то ошибкой, почему-то не применяется...
F1ernandes вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить запись в MySQL. Apache. PHP. ViNcHeStEr PHP 3 11.08.2012 11:29
Нужна помошь в настройке PHP и Apache DrHouse Помощь студентам 10 13.07.2009 22:04
Реально ли написать на Delphi 7 свою библиотеку для Apache (PHP интерпр.) ? FLEX_NST PHP 1 05.07.2009 18:13
Apache + php Ururu PHP 3 25.04.2009 15:39