Ru-Board.club
← Вернуться в раздел «Web-программирование»

» mod_rewrite: документация, готовые решения, вопросы

Автор: MyGoogle
Дата сообщения: 22.03.2014 15:35
Всем привет.

Вот так работает (т.е что идет после /cat/cats/переменная)


RewriteRule ^cat/cats/([^/]+)/$ /?q=test&cat=0&type=ad&cityname=$1 [L]



А вот так не работает



RewriteRule ^cat-cats/([^/]+)/$ /?q=test&cat=0&type=ad&cityname=$1 [L]




т.е если есть ТИРЕ вместо / то не передает парамент почему то, мне нужно получить то что идет после cat/cats/ и передать этот параметр в $_GET но с тире не хочет, как это возможно сделать ?
Автор: Cheery
Дата сообщения: 22.03.2014 19:49
MyGoogle
строку запроса покажите
Автор: MyGoogle
Дата сообщения: 22.03.2014 20:29
Какую еще структуру ?

RewriteRule ^cat/cats/([^/]+)/$ /?q=test&cat=0&type=ad&cityname=$1 [L]

сдесь мы обращаемся к странице index.php??q=test&cat=0&type=ad&cityname=amsterdam

на странице я получаю данные так $_GET["cityname"];

в этом случае все работает, но в этом

^cat-cats/([^/]+)/$ /?q=test&cat=0&type=ad&cityname=$1 [L]

Не работает т.е если стоит тире параметр не передаються почему то..

А мне нужно получать то что идет после cat-cats/сдесь то что мне нужно получить в $_GET

Вот сижу не пойму почему не работает.. т.е если слеш стоит то передаеться если слеша нет то нет..
Автор: Cheery
Дата сообщения: 22.03.2014 20:43
MyGoogle

Цитата:
Какую еще структуру

где вы слово "структура" увидели?


Цитата:
А мне нужно получать то что идет после cat-cats/сдесь то что мне нужно получить в $_GET

я и говорю - покажите строку запроса, чтобы проанализировать почему она не подходит.
Автор: MyGoogle
Дата сообщения: 22.03.2014 21:10
Ну строка запросы это я думаю вы об этом ?

http://www.site.com/index.php?q=test&cat=0&type=ad&cityname=amsterdam

ну можно без Index.php он сам по дефауту идет.

Автор: Cheery
Дата сообщения: 22.03.2014 21:51
MyGoogle

Цитата:
Ну строка запросы это я думаю вы об этом ?

да елки-палки..
вы для чего правило написать пытаетесь?
для какого преобразования, пример начальной строки покажите.

под что это пытаетесь применить?

Цитата:
^cat-cats/([^/]+)/$

Автор: MyGoogle
Дата сообщения: 23.03.2014 10:04
Как под что ?

под это

http://www.site.com/?q=test&cat=0&type=ad&cityname=amsterdam


Это поиск как бы идет, т.е если я ввожу

http://www.site.com/cat-cats/amsterdam/

то должно передавать значение amsterdam

но оно передаеться только если не ТИРЕ а СЛЕШ стоит т.е

http://www.site.com/cat/cats/amsterdam/


Автор: Cheery
Дата сообщения: 23.03.2014 10:40
MyGoogle

Цитата:
Как под что ?

вы задаете ненужные вопросы. делайте так, как вас просят, чтобы не повторять одно и то же 3 раза.


Цитата:
оно передаеться


Цитата:
то передаеться

что делает - на конце мягкого знака нет, значит и в глаголе не должно быть



Цитата:
но оно передаеться только если не ТИРЕ а СЛЕШ стоит т.е

значит показывайте все правила - у вас где то возникает конфликт.
тире или нет - разницы быть не должно, причина в чем то еще.
можете включить логгирование работы mod_rewrite и посмотреть обработку запроса
Автор: MyGoogle
Дата сообщения: 23.03.2014 12:54
тире или нет - разницы быть не должно - быть не должно (как раз должно) тире может служить разделителем между префиксом и переменной !

Видать вы тут на форуме за всех оттдуваетесь так как везде только вы отвечаете..

Добавлено:
Вообщем я понял в чем дело дело дело в том что что повторяеться там некоторые строки в htaccess оказуеться шери ты был прав я просто удалил все правила и оставил одно - вроде работает.
Надеюсь дальше разберусь спасибо большое
Автор: MyGoogle
Дата сообщения: 10.04.2014 21:35
Вообщем у меня есть правило в .htaccess

RewriteRule ^[^_]+_(\d+)/[^_]+_(\d+)/$ index.php?show=post&cat=$1&subcat=$2 [QSA]

Сам урл выглядит так

http://site.com/testprefix/region/cat_4/subcat_11/

т.е testprefix/region/ идут как дополнение а передача идет только из cat_4 и subcat_11

Почему когда я проверяю программой (тест урл) то мне выдает надпись object moved tempo...

Как мне сделать так что бы был нормальный статус 200 ?


Писал так же [QSA,L]

Но при проверки пишет всегда 302 ошибка - хотя страница отображается нормально если зайти с браузера.
Автор: Cheery
Дата сообщения: 10.04.2014 21:37
MyGoogle

Цитата:
о при проверки пишет всегда 302 ошибка

значит срабатывает где то еще или сервис проверки глючит.

посмотрите сами заголовки ответа сервера
Автор: MyGoogle
Дата сообщения: 10.04.2014 22:08
Как это где то еще ?
Вообщем оставил в штаччес только этот мод реврайт - все равно пишет "временно перемещен"
Странно щас включил анализ http заголовков, пишет 200 ОК.. хм
Что то тут не так надо как то достоверно проверить
Автор: Cheery
Дата сообщения: 10.04.2014 22:09
MyGoogle

Цитата:
Как это где то еще ?

срабатывает другое правило, к примеру.


Цитата:
штаччес только этот мод реврайт - все равно пишет "временно перемещен"

значит врет сервис.
Автор: MyGoogle
Дата сообщения: 10.04.2014 22:40
Ну это не сервис это программа у меня на пк..
Может посоветуете какую нибудь программу для локального анализа ссылок ?
Т.е я перед запуском хочу проверить все ли ок с сайтом.. нет ли битых картинок ссылок.
Автор: PavelSES
Дата сообщения: 10.04.2014 23:13
MyGoogle

Цитата:
Может посоветуете какую нибудь программу для локального анализа ссылок ?

Xenu's Link Sleuth не подойдёт?
Автор: Cheery
Дата сообщения: 10.04.2014 23:14
MyGoogle

Цитата:
Может посоветуете какую нибудь программу для локального анализа ссылок ?

не пользуюсь.

часть ссылок, к примеру, может быть вообще создаваться с помощью javascript.

я проверяю уже потом, по логам ошибок сервера или же через утилиты вебмастера в гугле.
Автор: MyGoogle
Дата сообщения: 10.04.2014 23:27

Цитата:
Xenu's Link Sleuth не подойдёт?


Так я ей и проверяю ! а она мне выдает moved temp..

Потом делаю так, включаю анализ заголовков, ввожу урл, и все, в заголовках пишет 200 OK.

Вот и думаю что то не так..



Цитата:
я проверяю уже потом, по логам ошибок сервера или же через утилиты вебмастера в гугле.


Эм, а как тогда если гугл захватит ссылок невалидных, потом от них избавлятся.. из индекса или еще что не очень как бы, лучше сразу на валид проверить на локал хосте и все..
Автор: Cheery
Дата сообщения: 10.04.2014 23:50
MyGoogle

Цитата:
Вот и думаю что то не так..

смотрите на какой URL она ругается и делайте как она.
посмотрите логи сервера, как конкретно она делает запрос - может там что то отличается
Автор: MyGoogle
Дата сообщения: 11.04.2014 10:23
Странное что то происходит, захожу по одному урлу, первый раз, пише ок 200 ОК.
Захожу по другому урлу (такой же директории, т.е отличия лиж название) пише 302 мувед.
Потом захожу на первый урл, где было 200 ОК - пише 302 ! в заголовках тоже... как это такое может быть не пойму.. т.е 1 раз срабатывает 200 ОК потом всегда 302 даже где было 200 ОК


п.с Щас скачаю ксену 2010 года, а то у меня аж 2008 глянул версию может в программе ошибка, потому что открываю все браузеры слежу за заголовками везде пишет 200 ОК - и нет никаких 302..
Автор: MyGoogle
Дата сообщения: 16.04.2014 10:22
Доброе время суток.

У меня возник вопрос,

Как такое сделали ?

К примеру есть ссылка

www.site.com/cat/auto/auto_bmw_id123.html

Если я к примеру пишу в ссылке (id122423234232323) делая как бы id не существующим.

То меня перекидывает на поддиректорию т.е сюда с 301 редиректом


www.site.com/cat/auto/


Как сделать такое на сайте у себя ? т.е если урл не валидный то тебя перекидывает на подкатегорию того урла..


Автор: Cheery
Дата сообщения: 16.04.2014 21:40
MyGoogle

Цитата:
т.е если урл не валидный то тебя перекидывает на подкатегорию того урла..

скрипт, на который передаются данные через mod_rewrite, проверяет наличие нужной записи.
если нет, то
header('Location: /url', 301);
exit;
Автор: perdun
Дата сообщения: 02.05.2014 00:06
подскажите, плз, как отфильтровать запросы с полным урл вида "GET http://google.com/etc.."
надо чтобы проходили только относительные "GET /wp-content/themes...."

пишу такое правило

Код: RewriteRule !^http://(www.)?site.nsk.ru/.*$ - [F]
Автор: Cheery
Дата сообщения: 02.05.2014 00:24
perdun

Цитата:
как отфильтровать запросы с полным урл вида

зачем? ну ищут у вас таким образом прокси - не срабатывает же?


Цитата:
где не так?

вы запрещаете все, что НЕ такое
то есть все запросы, которые не начинаются с http://(www.)?site.nsk.ru/
то есть все, что не GET http://(www.)?site.nsk.ru/
Автор: perdun
Дата сообщения: 02.05.2014 00:52

Цитата:
вы запрещаете все, что НЕ такое
то есть все запросы, которые не начинаются с http://(www.)?site.nsk.ru/
то есть все, что не GET http://(www.)?site.nsk.ru/

ага, именно так и хочу запретить
тоесть, допустимым являются ТОЛЬКО
http://www.site.nsk.ru/wp-content/themes..
http://site.nsk.ru/wp-content/themes..

Цитата:
зачем? ну ищут у вас таким образом прокси - не срабатывает же?

да как-то.. начинаю в этом сомневаться.. бывает и 200-й код..
этот вордпресс толи еще решето..
я их пакетным фильтром по разным хитрым критериям рубаю..
таблицы через край уже..
Автор: Cheery
Дата сообщения: 02.05.2014 01:03
perdun
вы не совсем понимаете как работает http или mod_rewrite
имя хоста передается в параметре host в http запросе, не в том, что идет в строке начинающейся с GET, POST и так далее.
поэтому нужно, как раз, просто сделать как

RewriteRule !^http:// - [F]


Цитата:
да как-то.. начинаю в этом сомневаться.. бывает и 200-й код..

и что? не срабатывает - сайт выдает первую страницу по умолчанию.
сработает только при специальной настройке сервера или же скрипта, который будет запускаться, брать URL и скачивать его, отдавая как ответ на запрос.


Цитата:
этот вордпресс толи еще решето

нормальная вещь, если прямые руки, правильно настроено и не навешано слишком много лишнего.
автообновление - очень удобная вещь.
Автор: perdun
Дата сообщения: 02.05.2014 04:57
Cheery

Цитата:
RewriteRule !^http:// - [F]

неа, так же, всем подряд - форбидден..

Цитата:
217.118.79.42 - - [02/May/2014:08:29:54 +0700] "GET /?page_id=225 HTTP/1.1" 403 202
115.148.177.244 - - [02/May/2014:08:30:07 +0700] "GET http://edge.quantserve.com/quant.js HTTP/1.0" 403 210
216.245.214.82 - - [02/May/2014:08:30:28 +0700] "CONNECT www.ticketmaster.com:443 HTTP/1.1" 403 202
82.146.39.86 - - [02/May/2014:08:30:39 +0700] "POST http://copylancer.ru:80/com_user/login HTTP/1.0" 403 216
93.120.211.148 - - [02/May/2014:08:30:43 +0700] "GET http://chek.zennolab.com/proxy.php HTTP/1.1" 403 211

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

Цитата:
автообновление - очень удобная вещь.

ага, удобная.. и работало как раз вот до таких "вражеских" запросов, потом перестало..
до этого вообще не было таких запросов с хттп, тем более CONNECT..
подозреваю худшее

Цитата:
или же скрипта, который будет запускаться, брать URL и скачивать его, отдавая как ответ на запрос.

Автор: Cheery
Дата сообщения: 02.05.2014 05:02
perdun

Цитата:
неа, так же, всем подряд - форбидден..

опечатался - уберите ! оттуда
Автор: perdun
Дата сообщения: 02.05.2014 11:15
Cheery
неа, враг проходит, как и раньше
надо как-то к домену вязать наверно..

лог апача
180.251.245.29 - - [02/May/2014:14:50:20 +0700] "GET http://www.baidu.com/ HTTP/1.1" 200 44

лог мода
180.251.245.29 - - [02/May/2014:14:50:20 +0700] [www.baidu.com/sid#802903128][rid#8029e30a0/initial] (2) init rewrite engine with requested uri /
180.251.245.29 - - [02/May/2014:14:50:20 +0700] [www.baidu.com/sid#802903128][rid#8029e30a0/initial] (3) applying pattern '^http://' to uri '/'
180.251.245.29 - - [02/May/2014:14:50:20 +0700] [www.baidu.com/sid#802903128][rid#8029e30a0/initial] (1) pass through /
Автор: Cheery
Дата сообщения: 02.05.2014 19:00
perdun
ну, как видете, апач умнее и сам все обрезает.
мне можно было сразу догадаться, так как иначе бы выдавал не страницу с 200.

может быть можно проверять в RewriteCond - для %{REQUEST_URI}, но не нужно все это.
Автор: perdun
Дата сообщения: 03.05.2014 17:30
Cheery

Цитата:
ну, как видете, апач умнее и сам все обрезает.
мне можно было сразу догадаться, так как иначе бы выдавал не страницу с 200.

к сожалению, есть основания в этом сомневаться..
на хосте есть squid, раздающий инет в локалке, ну и плюс еще "обратный" прокси на бэкенды..
дык вот в [more=логах]2014/04/30 08:44:21 kid1| ctx: enter level 0: 'http://www.tsj.ru/imgrubrs.asp?rubr_id=10330&30.04.2014'
2014/04/30 08:44:21 kid1| NOTICE: found double content-length header
2014/04/30 10:02:31 kid1| ctx: exit level 0
2014/04/30 10:02:31 kid1| FD 15, 192.168.121.250 [Stopped, reason:Listener socket closed job1]: (53) Software caused connection abort
2014/04/30 12:17:41 kid1| local=xx.xx.185.240:62416 remote=199.16.156.201:443 FD 146 flags=1: read/write failure: (60) Operation timed out
2014/04/30 13:17:22 kid1| local=192.168.121.250:3128 remote=192.168.121.106:64007 FD 354 flags=1: read/write failure: (32) Broken pipe
2014/04/30 13:42:34 kid1| local=xx.xx.185.240:26252 remote=194.54.14.132:443 FD 225 flags=1: read/write failure: (60) Operation timed out
2014/04/30 13:47:35 kid1| local=xx.xx.185.240:16424 remote=194.54.14.132:443 FD 231 flags=1: read/write failure: (60) Operation timed out
2014/04/30 13:52:14 kid1| local=xx.xx.185.240:16423 remote=194.54.14.132:443 FD 232 flags=1: read/write failure: (60) Operation timed out
2014/04/30 14:42:52 kid1| local=192.168.121.250:3128 remote=192.168.121.53:28481 FD 111 flags=1: read/write failure: (64) Host is down
2014/05/03 14:23:33 kid1| Preparing for shutdown after 1412416 requests[/more] сквида замечено установление пира с удаленным хостом..

а в [more=логе апача] cat www-access_log | grep check
82.37.218.230 - - [03/May/2014:16:56:06 +0700] "GET http://the-proxy-list.com/files/check.php?k=3ZRIXIr0QD9HHDE1eVyKzw== HTTP/1.1" 404 213
93.120.211.148 - - [03/May/2014:16:58:01 +0700] "GET http://check2.zennolab.com/proxy.php HTTP/1.1" 404 207
66.220.7.244 - - [03/May/2014:16:58:09 +0700] "POST http://66.220.7.244/check.php HTTP/1.1" 404 207
46.233.224.38 - - [03/May/2014:16:59:25 +0700] "GET http://check2.zennolab.com/proxy.php HTTP/1.1" 404 207
121.54.49.82 - - [03/May/2014:17:03:44 +0700] "GET http://the-proxy-list.com/files/check.php?k=oXUfoMnupPxyhRWI3wU4Rw== HTTP/1.1" 404 213
93.120.211.148 - - [03/May/2014:17:13:53 +0700] "GET http://check2.zennolab.com/proxy.php HTTP/1.1" 404 207
66.220.7.244 - - [03/May/2014:17:17:02 +0700] "POST http://66.220.7.244/check.php HTTP/1.1" 404 207
82.37.218.230 - - [03/May/2014:17:28:28 +0700] "GET http://the-proxy-list.com/files/check.php?k=3ZRIXIr0QD9HHDE1eVyKzw== HTTP/1.1" 404 213
216.244.93.52 - - [03/May/2014:17:31:44 +0700] "GET http://the-proxy-list.com/files/check.php?k=yNbPVXeg9oWpvAoZgtlsAQ== HTTP/1.1" 404 213
66.220.7.244 - - [03/May/2014:17:35:55 +0700] "POST http://66.220.7.244/check.php HTTP/1.1" 404 207
184.95.52.218 - - [03/May/2014:17:39:20 +0700] "GET http://the-proxy-list.com/files/check.php?k=V01w+oxtcIQcVgDsIzzcRQ== HTTP/1.1" 404 213
99.242.187.77 - - [03/May/2014:17:40:07 +0700] "GET http://the-proxy-list.com/files/check.php?k=caw2Ilpu08JEyqDmqGAiUQ== HTTP/1.1" 404 213
66.220.7.244 - - [03/May/2014:17:54:46 +0700] "POST http://66.220.7.244/check.php HTTP/1.1" 404 207
216.152.251.16 - - [03/May/2014:17:55:41 +0700] "GET http://the-proxy-list.com/files/check.php?k=3OGQiyh2U/1O8BcjdYgB/g== HTTP/1.1" 404 213[/more] - чекеры\брутфорсеры на сквиду.., возможно имел место быть вражеский пэйлоад -хз, тоесть, я этого

Цитата:
сработает только при специальной настройке сервера или же скрипта, который будет запускаться, брать URL и скачивать его, отдавая как ответ на запрос
не исключаю..

плз, помогите с кондишном
так

Код: #RewriteCond %{REQUEST_URI} ^http://
RewriteCond %{REQUEST_URI} ^/
RewriteCond %{REQUEST_URI} !^/wp(.*)

#RewriteRule ^http:// - [F]
RewriteRule (.*) - [F]
#RewriteRule !^/ - [F]

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

Предыдущая тема: PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.