Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Почему не все браузеры работают с RewriteRule?
 
 автор: pavluxa09   (14.01.2012 в 15:02)   письмо автору
 
 

Здравствуйте. У меня вписан в htaccess такой код:

AddDefaultCharset UTF-8
RewriteEngine On 
RewriteBase / 
RewriteRule ^admin.html$ admin.php [L,QSA]
RewriteRule ^admin-([a-z0-9_-]+).html$ admin.php?p=$1 [L,QSA]
RewriteRule ^([a-z0-9_-]+).html$ index.php?p=$1 [L,QSA]


Но почему то не все браузеры хотят работать с ссылками вида моястраница.html.
Например мобильный браузер опера не хочет отправлять данные с формы методом POST на страницу указанную в action="моястраница.html", а вот при action="?p=моястраница" всё нормально. Так же само и скрипты PHP работающие через CURL. Как можно сделать что бы везде всё работало правильно?

  Ответить  
 
 автор: cheops   (14.01.2012 в 19:26)   письмо автору
 
   для: pavluxa09   (14.01.2012 в 15:02)
 

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

  Ответить  
 
 автор: pavluxa09   (14.01.2012 в 21:00)   письмо автору
 
   для: cheops   (14.01.2012 в 19:26)
 

Проблема не в русских текстах, а в том что он не распознаёт mypage.html , токо ?p=mypage

  Ответить  
 
 автор: Sfinks   (14.01.2012 в 22:10)   письмо автору
 
   для: pavluxa09   (14.01.2012 в 21:00)
 

Дело в том, что RewriteRule работает на стороне сервера и от мини оперы никак не зависит. Тут не в этом проблема, а в чем-то другом. А вот в чем, я чет никак не могу понять.... Просто я как-раз WAPом занимаюсь в основном, и таких проблем не встречал. Вы бы привели фрагмент кода, чтоб подумать получше.

  Ответить  
 
 автор: pavluxa09   (14.01.2012 в 22:39)   письмо автору
 
   для: Sfinks   (14.01.2012 в 22:10)
 

HTACCESS

AddDefaultCharset UTF-8
RewriteEngine On 
RewriteBase / 
RewriteRule ^admin.html$ admin.php [L,QSA]
RewriteRule ^admin-([a-z0-9_-]+).html$ admin.php?p=$1 [L,QSA]
RewriteRule ^([a-z0-9_-]+).html$ index.php?p=$1 [L,QSA]



При отправке форма не отправляет данные а тупо переходит на страницу
<form action="contacts.html' method="post">
...
</form>



Всё супер пашет
<form action="?p=contacts' method="post">
...
</form>


Такая же проблема когда настраиваешь некоторые платежные системы, оне на страницы вида mygame.html не отправляют данные POST.

  Ответить  
 
 автор: Sfinks   (14.01.2012 в 23:16)   письмо автору
 
   для: pavluxa09   (14.01.2012 в 22:39)
 

А у вас в коде так и написано:
"contacts.html'
??? Или это вы в спешке с ковычками напутали?
А в десктопных браузерах работает как и предполагалось?
А contacts.html в корне сайта лежит?
И QSA из редиректа уберите. При таком редиректе это не имеет смысла.

  Ответить  
 
 автор: pavluxa09   (15.01.2012 в 00:54)   письмо автору
 
   для: Sfinks   (14.01.2012 в 23:16)
 

В спешке ковычки попутал а в коде нормально. В десктопных браузерах норма. contacts.html вообще на сервере нет, у меня сделано ЧПУ где ссылки вида: mypage.html заменяются реальностью intex.php?p=mypage.
Попытался убрать но ничего не поменялось.

  Ответить  
 
 автор: Sfinks   (15.01.2012 в 02:04)   письмо автору
 
   для: pavluxa09   (15.01.2012 в 00:54)
 

> contacts.html вообще на сервере нет, у меня сделано ЧПУ где ссылки вида:
> mypage.html заменяются реальностью intex.php?p=mypage.
Ну понятно. Оговорился. Имелся ввиду файл с формой из которой идет обращение. Он в корне?
Попробуйте в форме точнее путь указать: "./contacts.html" или "/contacts.html".
А еще лучше "http://".$_SERVER["SERVER_NAME"]."/contacts.html"
Туповатые они, мобильные браузеры. Скорее всего неправильно путь интерпретируют.

> Попытался убрать но ничего не поменялось.
И не должно было... Я ж говорю, бессмысленная в данной ситуации штука.

  Ответить  
 
 автор: pavluxa09   (15.01.2012 в 04:25)   письмо автору
 
   для: Sfinks   (15.01.2012 в 02:04)
 

Попытался сделать как вы предложили, браузеры заработали. А вот CURL нет.
То есть если на страницу mypage.html отправляется POST запрос через CURL то данные на страницу тупо не приходят, токо если слать на ?p=mypage

  Ответить  
 
 автор: Sfinks   (15.01.2012 в 09:51)   письмо автору
 
   для: pavluxa09   (15.01.2012 в 04:25)
 

Надеюсь у вас ПХП >= 5.1.3? Тогда добавьте в CURL:
curl_setopt($ch,CURLINFO_HEADER_OUT,true)
и после curl_exec($ch); выполните
$headers = curl_getinfo($ch,CURLINFO_HEADER_OUT);
echo $headers;
Посмотрим что там и куда передается....

  Ответить  
 
 автор: pavluxa09   (17.01.2012 в 12:13)   письмо автору
 
   для: Sfinks   (15.01.2012 в 09:51)
 

Дело не во мне, а в роботах. У меня работы платежных систем не могут передать данные на обработчик. Они же не смогут написать эту строку

  Ответить  
 
 автор: Sfinks   (17.01.2012 в 12:51)   письмо автору
 
   для: pavluxa09   (17.01.2012 в 12:13)
 

Значит роботы корявые. Или тоже путь не находят (что в общем-то и есть корявость).... RewriteRule у вас настроены правильно. Раз они работают хоть где-то, то должны работать везде,

Т.К. БРАУЗЕР, CURL И Т.Д. И Т.П. ПОНЯТИЯ НЕ ИМЕЮТ, ЧПУ У ВАС ИЛИ РЕАЛЬНЫЙ ФАЙЛ!

Просто нужно наладить взаимодействие.

Вам нужно добиться от этих роботов, чтоб они в ответе обращались к вашему серверу именно в том виде, в котором у вас это прописано в RewriteRule. Вы им как передаете адрес на который они через CURL обращаются?

Или наоборот дописать дополнительное правило для этих роботов. Но для этого нужно знать как они к вам обращаются. Например в логах апача можете найти этого робота и посмотреть.

  Ответить  
 
 автор: Sfinks   (17.01.2012 в 12:53)   письмо автору
 
   для: pavluxa09   (17.01.2012 в 12:13)
 

Кстати, роботы, они ж наверняка какие-то данные файлу пытаются передать, и наверняка через GET. Может просто $ в конце правила убрать?
RewriteRule ^([a-z0-9_-]+).html index.php?p=$1 [L]
В таком случае и QSA будет иметь смысл
RewriteRule ^([a-z0-9_-]+).html index.php?p=$1 [L,QSA]

  Ответить  
 
 автор: pavluxa09   (17.01.2012 в 18:38)   письмо автору
 
   для: Sfinks   (17.01.2012 в 12:53)
 

Да возможно, а как сделать что бы работало? И что такое QSA?

  Ответить  
 
 автор: cheops   (17.01.2012 в 20:32)   письмо автору
 
   для: pavluxa09   (17.01.2012 в 18:38)
 

>И что такое QSA?
Флаг, который требует, чтобы mod_rewrite не игнорировал GET-параметры.

  Ответить  
 
 автор: Sfinks   (17.01.2012 в 23:41)   письмо автору
 
   для: pavluxa09   (17.01.2012 в 18:38)
 

> Да возможно, а как сделать что бы работало?
Я же написал вам. Для начала исправьте RewriteRule как я указал выше. Если не поможет, найдите в логах доступа апача обращение от робота платежной системы и, если сами не разберетесь, напишите сюда как он к вам обращается.

> И что такое QSA?
Этот флаг заставляет мод реврайт дописать к конечному пути начальную строку запроса. Например если у вас правило:
RewriteRule index.html index.php?q=index [L,QSA]
а робот поисковика обращается к файлу например так:
http://server.ru/index.html?result=OK
то конечный путь будет выглядеть так:
http://server.ru/index.php?q=index&result=OK

  Ответить  
 
 автор: pavluxa09   (04.02.2012 в 15:42)   письмо автору
 
   для: Sfinks   (17.01.2012 в 23:41)
 

Прошу обратить внимание, что если в браузере почистить куки то начинает всё работать

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования