Проблема такая. Не передаются GET данные если я использую RewriteRule. Причем эта проблема наблюдается на одном сервере. Мало вероятно что это связано както с PHP, скорее всего тут причина в Apache2. Может кто подскажет где копать? Вот что в файле .htaccess : RewriteRule ^test/(.*)/?$ /test.php?ss=$1 [L] Сам файл test.php найден, а get данных нет!?
macik Да есть же доступ к _SERVER["REQUEST_URI"] С него можно вынести в массив _GET всё, что требуется. Причем не вручную.
Зачем ? Я понимаю что есть _SERVER["REQUEST_URI"] но зачем делать дурную работу если оно должно работать. Мне важно исправить ошибку. Как это на одном сервере работает, даже если так передавать "test.php?hh=hhh" то все работает, а так не хочет test/hh/hhh/
Очередной мозгоёб. Ты сказал, что у тебя не работает передача данных методом GET. GET - это метод, посредством которого запрашивается страница. Метод имеет свою спецификацию. test/hh/hhh — это не GET, это часть URI. Не надо ебать мозг нам и задавать НЕВЕРНЫЕ ВОПРОСЫ. У тебя не работает mod_rewrite как таковой, а не GET передача.
igordata Он задал вопрос, ему ответили. А потом выясняется, что он даже вопрос неправильно задал. Мало того неправильно, СОВСЕМ в другую сторону погнал.
Apple Apple ты вообще прочитал мой вопрос? Если я так уточняющее написал то наверно я не имел виду что у меня не работает вообще передача GET!? Если кому что не понятно вопросе то он может спросить. PS Держите себя в рамках приличия, мы вроде свами на брудершафт не пили.
macik ну ты в техподдержку напиши. скажи что на твоем сервере не работает гет в таком-то и таком-то случае. а вот на соседнем -все ок. посмотрим что скажут.
macik Ты видел своё правило? Какие GET-данные? Код (Text): RewriteRule ^test/(.*)/?$ /test.php?ss=$1 [L] С этого правила ты получишь только массив _GET, в котором _GET["ss"] равное строке запроса. Всё! _GET["ss"] будет содержать /hh/hhh Чего ты ещё хочешь? Всё работает именно так, как задумано. Единственное, что может не сработать - правило преобразования, и тогда получается именно описанный выше результат. Почему не сработало - я написал.
Сервер локальны. Сам себе буду писать Я так и не понял. Есть url host.com/test/21/ он должен для сервера преобразоваться в host.com/test.php?ss=21 c помощью этого: RewriteRule ^test/(.*)/?$ /test.php?ss=$1 [L] Но не хрена не выходит. На страницу сервер/test.php переходит но GET переменной и темболие значения нет. Так в чем ошибка? Криво написан RewriteRule или не правильные настройки сервера? И почему на другом сервере все работает!?
Создай два файла: .htaccess Код (Text): RewriteEngine On RewriteRule ^address/([0-9]+)$ rewrite.php?query=$1 rewrite.php PHP: <?php error_reporting(E_ALL | E_STRICT); header("Content-type: text/plain; charset=windows-1251"); // Dump print_r($_REQUEST); ?> Зайди по адресу http://example.com/address/6 и скажи, что там есть, и что не сработало.
У вас заработало: Код (Text): Array ( [query] => 6 [PHPSESSID] => 2b1aafb117db8ed5c633d4bef2c2d467 ) А что я не так делал, почему у меня не работает? RewriteRule ^test/(.*)/?$ /test.php?ss=$1 [L] Неужели ошибка в /?? PS Спасибо за помощь и терпение
Apple напиши название функции, если несложно. гугл молчит (ну, или мне терпения не хватает пролистывать всю кучу страниц )
Мне хостингов хватает. Это внутренний WEB сервер для нужд предприятия и он на ЛИНУХЕ. Я нашел причину. Все дело в апаче. В нем включен параметр который позволяет обращаться к php файлам без расширения. По этой причине работали правила только в начале которых нет совпадения с реальным именами файла. Твой пример сработал сразу, но и конечно он и привел меня к таком выводу. Проверив все я теперь уверен на все сто! Теперь напрашивается вопрос, как выключить это. "Обращение к файлам без указания расширения"?