За последние 24 часа нас посетили 60884 программиста и 1744 робота. Сейчас ищут 1903 программиста ...

GET+PHP+Apache+Rewrite не работает полностью.

Тема в разделе "Прочее", создана пользователем macik, 17 сен 2010.

  1. macik

    macik Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    71
    Симпатии:
    0
    Проблема такая. Не передаются GET данные если я использую RewriteRule. Причем эта проблема наблюдается на одном сервере. Мало вероятно что это связано както с PHP, скорее всего тут причина в Apache2. Может кто подскажет где копать?
    Вот что в файле .htaccess : RewriteRule ^test/(.*)/?$ /test.php?ss=$1 [L]
    Сам файл test.php найден, а get данных нет!?
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
  3. macik

    macik Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    71
    Симпатии:
    0
    Это как понимать? Я не особо понимаю ...
     
  4. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
  5. macik

    macik Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    71
    Симпатии:
    0
    Нет не помогло. Может это сами настройки Apache?
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    macik
    Да есть же доступ к _SERVER["REQUEST_URI"]
    С него можно вынести в массив _GET всё, что требуется. Причем не вручную.
     
  7. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    интересно, есть фукнция?
    а то я постоянно регулярками пользуюсь
     
  8. macik

    macik Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    71
    Симпатии:
    0
    Зачем ?

    Я понимаю что есть _SERVER["REQUEST_URI"] но зачем делать дурную работу если оно должно работать. Мне важно исправить ошибку. Как это на одном сервере работает, даже если так передавать "test.php?hh=hhh" то все работает, а так не хочет test/hh/hhh/
     
  9. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Очередной мозгоёб.
    Ты сказал, что у тебя не работает передача данных методом GET.
    GET - это метод, посредством которого запрашивается страница. Метод имеет свою спецификацию.
    test/hh/hhh — это не GET, это часть URI. Не надо ебать мозг нам и задавать НЕВЕРНЫЕ ВОПРОСЫ.
    У тебя не работает mod_rewrite как таковой, а не GET передача.
     
  10. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Есть.
    И, что не удивительно, гораздо гибче и безошибочнее твоей регулярки.
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Apple
    =) кажется на кого-то чихнул симплест
     
  12. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    igordata
    Он задал вопрос, ему ответили.
    А потом выясняется, что он даже вопрос неправильно задал. Мало того неправильно, СОВСЕМ в другую сторону погнал.
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    иди ударь его. таким не место в нашем коллективе! :D
     
  14. macik

    macik Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    71
    Симпатии:
    0
    Apple
    Apple ты вообще прочитал мой вопрос?
    Если я так уточняющее написал то наверно я не имел виду что у меня не работает вообще передача GET!?
    Если кому что не понятно вопросе то он может спросить.
    PS
    Держите себя в рамках приличия, мы вроде свами на брудершафт не пили.
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    macik
    ну ты в техподдержку напиши. скажи что на твоем сервере не работает гет в таком-то и таком-то случае. а вот на соседнем -все ок. посмотрим что скажут.
     
  16. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    macik
    Ты видел своё правило? Какие GET-данные?
    Код (Text):
    1. RewriteRule ^test/(.*)/?$ /test.php?ss=$1 [L]
    С этого правила ты получишь только массив _GET, в котором _GET["ss"] равное строке запроса. Всё!
    _GET["ss"] будет содержать /hh/hhh

    Чего ты ещё хочешь? Всё работает именно так, как задумано.
    Единственное, что может не сработать - правило преобразования, и тогда получается именно описанный выше результат.
    Почему не сработало - я написал.
     
  17. macik

    macik Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    71
    Симпатии:
    0
    Сервер локальны. Сам себе буду писать ;)
    Я так и не понял.
    Есть url host.com/test/21/ он должен для сервера преобразоваться в host.com/test.php?ss=21 c помощью этого:
    RewriteRule ^test/(.*)/?$ /test.php?ss=$1 [L]
    Но не хрена не выходит. На страницу сервер/test.php переходит но GET переменной и темболие значения нет.
    Так в чем ошибка? Криво написан RewriteRule или не правильные настройки сервера? И почему на другом сервере все работает!?
     
  18. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Создай два файла:
    .htaccess
    Код (Text):
    1. RewriteEngine On
    2. RewriteRule ^address/([0-9]+)$ rewrite.php?query=$1
    rewrite.php
    PHP:
    1. <?php
    2.  
    3. error_reporting(E_ALL | E_STRICT);
    4. header("Content-type: text/plain; charset=windows-1251");
    5.  
    6. // Dump
    7. print_r($_REQUEST);
    8.  
    9. ?>
    Зайди по адресу http://example.com/address/6 и скажи, что там есть, и что не сработало.
     
  19. macik

    macik Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    71
    Симпатии:
    0
    У вас заработало:
    Код (Text):
    1. Array
    2. (
    3.     [query] => 6
    4.     [PHPSESSID] => 2b1aafb117db8ed5c633d4bef2c2d467
    5. )

    А что я не так делал, почему у меня не работает? RewriteRule ^test/(.*)/?$ /test.php?ss=$1 [L] Неужели ошибка в /??

    PS
    Спасибо за помощь и терпение ;)
     
  20. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    macik
    Покажи ПОЛНОСТЬЮ весь старый файл .htaccess
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    macik
    Купи хостинг за рубль и не мучайся с локальностью. еще небось под виндой?
     
  22. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Apple
    напиши название функции, если несложно. гугл молчит
    (ну, или мне терпения не хватает пролистывать всю кучу страниц :))
     
  23. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
  24. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Apple
    благодарю, как раз то, что надо.
     
  25. macik

    macik Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    71
    Симпатии:
    0
    Мне хостингов хватает. Это внутренний WEB сервер для нужд предприятия и он на ЛИНУХЕ.
    Я нашел причину. Все дело в апаче. В нем включен параметр который позволяет обращаться к php файлам без расширения.
    По этой причине работали правила только в начале которых нет совпадения с реальным именами файла. Твой пример сработал сразу, но и конечно он и привел меня к таком выводу. Проверив все я теперь уверен на все сто!

    Теперь напрашивается вопрос, как выключить это. "Обращение к файлам без указания расширения"?