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

» Apache+mod_rewrite

Автор: mtxd
Дата сообщения: 11.09.2007 17:51

Цитата:
А почему лог был дан для другого правила?

Да потому что уже много вариантов перепробовал, а то правило (^([^/]*)/(([^/]*)/...) приводило к ошибке, которую я описал, поэтому привел лог того правила, которое хотя бы работало.

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

Если вдруг что, туда также смертельно сложно будет добавить ещё одну переменную?

Добавлено:
Правда дело похоже в (.*) вместо ([a-z\_\(\)]), такая конструкция проходит без ошибки... ее нельзя использвать в данном случае?
Автор: dacuan
Дата сообщения: 11.09.2007 18:02
mtxd

Цитата:
Если вдруг что, туда также смертельно сложно будет добавить ещё одну переменную?

На самом деле сложно -- так как mod_rewrite позволяет "захватывать" только 9 переменных, фактически это означает, что в правиле должно быть не более 9 пар круглых скобок, а в последнем работающем -- их 8. Для создания еще одного необязательного параметра нужны 2 скобки, а у нас в запасе осталась только одна. Есть способы обхода этого ограничения и, если понадобиться, то опишу.


Цитата:
Правда дело похоже в (.*) вместо ([a-z\_\(\)]), такая конструкция проходит без ошибки... ее нельзя использвать в данном случае?

Запись .* означает "все символы, сколько бы их ни было", при этом не обращается внимание на слэши. Если требуется "все символы до ближайшего слэша", то лучше использовать [^/]*
Автор: FastCat
Дата сообщения: 03.10.2007 22:30
Лучшe тут наверное спросить. Т.к. вопрос комплексный и касается mod_rewrite и .htaccess ?
Верней, как заставить mod_rewrite работать только в одной директории на сервере ?

Вот кусок моего httpd.conf


Код:
# forbid access to the entire filesystem by default
<Directory />
Options None
AllowOverride None
Order deny,allow
Deny from all
</Directory>

# use .htaccess files for overriding,
AccessFileName .htaccess
# and never show them
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
Автор: Xepec
Дата сообщения: 04.10.2007 09:03
Чем отличаются флаги L и N в RewriteRule?
На сколько я понял L должен означать конец замены, но почему-то цикл запускается вновь.
Автор: Cheery
Дата сообщения: 05.10.2007 02:40
Xepec
L=last
N=next
ссылка же есть в шапке
http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html

Цитата:
# 'last|L' (последнее правило)
Остановить процесс преобразования на этом месте и не применять больше никаких правил преобразований. Это соответствует оператору last в Perl или оператору break в языке C. Используйте этот флаг для того, чтобы не преобразовывать текущий URL другими, следующими за этим, правилами преобразований. К примеру, используйте это для преобразования корневого URL из ('/') в реальный, например, '/e/www/'.
# 'next|N' (следуюший раунд)
Перезапустить процесс преобразований (начав с первого правила). В этом случае URL снова сопоставляется неким условиям, но не оригинальный URL, а URL вышедший из последнего правила преобразования. Это соответствует оператору next в Perl или оператору continue из языка C. Используйте этот флаг для перезапуска процесса преобразований, т.е., безусловному переходу на начало цикла.
Однако будьте осторожны, для того чтобы не сделать бесконечный цикл!
Автор: Xepec
Дата сообщения: 05.10.2007 08:24
Это я читал, но судя по симтомам, при применении L преобразование url не заканчивается, а просто начинается новый цикл, с новыми параметрами, т.е. тоже самое, что и при N.


вот пример:

RewriteRule ^index.htm$ index/ [R]
RewriteRule ^index/$ index.htm [L]

выдает в итоге бесконечный цикл (если точнее не бесконечный, а пока не max redirect count), вместо того, чтобы [L]:"Остановить процесс преобразования на этом месте и не применять больше никаких правил преобразований.".
Автор: Xepec
Дата сообщения: 08.10.2007 08:41
Можно ли в таком свете написать правила так, чтобы
при запросе index.htm редиректило на index/ а при запросе index/ с использованием RewriteRule переписало его на index.htm?
Автор: Perf2k2
Дата сообщения: 25.10.2007 10:00
Ребят, есть вопрос по mod_rewrite.

Есть определенный сайт, есть файлик htaccess, в нем использую правила наподобии этого:

RewriteRule ^benefits/potreb/(.*).html$ benefits/potreb/index.php?page=$1 [L]

Здесь все нормуль, работает. При обращении к адресу benefits/potreb/1.html открывается страница benefits/potreb/index.php?page=1. Но! Нужно сделать так, чтобы нельзя было при этом обратиться к скрипту напрямую, т.е. benefits/potreb/index.php?page=1. Можно ли это организовать как-нибудь?

Спасибо.
Автор: kostyar
Дата сообщения: 27.10.2007 12:08
Есть проблема.
Перевели сайт на статические ссылки, но в .htaccess дописали правило для того чтобы поисковик переходя по старым ссылкам проиндексировал новые. Но при этом если в адресной строке набрать старую динамическую ссылку, то происходит зацыкливание. Вот как выглядят правила.

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /show_good\.php\?idtov=([0-9]+)(&[^\\]+)?\ HTTP/ [NC]
RewriteRule ^show_good\.php$ /serial-%1.html? [R=301,L]
RewriteRule ^serial-([0-9]+)\.html$ /show_good.php?idtov=$1 [NC,L]

P.S. Причем на локальном сервере все номально работает
Автор: Ryoga67
Дата сообщения: 22.11.2007 20:31

Цитата:
Ryoga67: запустил сейчас mod_rewrite.so и всё стало работать, только apache грузит процессор на 96% когда на страницу wordpressa пытаюсь зайти, на других скриптах где используется mod_rewrite.so всё нормально и htaccess работает как надо.


Цитата:
Cheery: включить логирование mod_rewrite и смотреть что и как преобразуется.. что нет бесконечных циклов


Включил, запустил и попытался зайти на страницу wordpressa итог 966Kb записей.
Загрузил http://coduo.narod.ru/rewriteLog.log
Я не разбираюсь, искал по одинаковым кускам лога, вроде бесконечный цикл, данные меняются только в [rid#58f160/initial/redir#4] выделено жирным:

Код: 127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#59a0b8/initial/redir#3] (1) [per-dir E:/Server/www/wordpress/] internal redirect with /wordpress/wordpress/index.php [INTERNAL REDIRECT]
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (3) [per-dir E:/Server/www/wordpress/] add path info postfix: E:/Server/www/wordpress/wordpress -> E:/Server/www/wordpress/wordpress/index.php
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (3) [per-dir E:/Server/www/wordpress/] strip per-dir prefix: E:/Server/www/wordpress/wordpress/index.php -> wordpress/index.php
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (3) [per-dir E:/Server/www/wordpress/] applying pattern '.' to uri 'wordpress/index.php'
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (4) RewriteCond: input='E:/Server/www/wordpress/wordpress' pattern='!-f' => matched
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (4) RewriteCond: input='E:/Server/www/wordpress/wordpress' pattern='!-d' => matched
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (2) [per-dir E:/Server/www/wordpress/] rewrite wordpress/index.php -> /wordpress/index.php
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (3) [per-dir E:/Server/www/wordpress/] add per-dir prefix: /wordpress/index.php -> E:/Server/www/wordpress//wordpress/index.php
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (2) [per-dir E:/Server/www/wordpress/] trying to replace prefix E:/Server/www/wordpress/ with /wordpress/
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (5) strip matching prefix: E:/Server/www/wordpress//wordpress/index.php -> /wordpress/index.php
127.0.0.1 - - [22/Nov/2007:12:56:16 +0300] [localhost/sid#5af648][rid#58f160/initial/redir#4] (4) add subst prefix: /wordpress/index.php -> /wordpress/wordpress/index.php
Автор: Ryoga67
Дата сообщения: 26.11.2007 21:26
Вообщем переустановил apache_v2.0.42 на другую версию, Apache 1.3.34 и mod_revrite стал нормально работать, процессор компьютера не забивается. Но теперь кажется, что PHP4 с Apache 1.3.34 стал давать большую нагрузку по сравнению с apache_v2.0.42.
Автор: 5973785
Дата сообщения: 13.12.2007 21:56
на сервере есть каталог /dir/

нужно чтоб все запросы от клиента с определенным юзер агентом перенаправлялись в каталог /dir_agent_id/

Почитал маны ну что-то ума у меня не хватило...

Сервер apache 2.2.6 (Linux)

Автор: yarasha
Дата сообщения: 24.09.2008 19:51
Очень хочется задать пару теоретических вопросов касательно модуля RewriteRule.
Была поставлена задача настроить преобразования URL. Я не буду вдаваться в подробности, все работает, причем на правах не прикрытой лести львиную долю информации почерпнул именно из ссылок в этом топике, не смотря на то, что последний пост уже почти годичной давности. Однако столкнулся с двумя не понятными моментами.
1.    Все заработало, как и должно было работать только в htaccess. Но мне, по многим соображениям, было бы предпочтительно все прописать в virtual host. А вот с virtual host у меня абсолютно ничего не получилось, причем в логах ничего нет, хотя поднимал RewriteLogLevel до максимума. То есть даже простейшая конструкция RewriteRule ^go/register$     productreg.php [R,L] не работает. Очевидно, что надо писать другие пути, НО ВОТ КАКИЕ???????? Все попытки, как и написать полные пути, так и другие не увенчались успехом. Однако в документации http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html , четко стоит context: server config, virtual host, directory, .htaccess.
2.    При некоторых преобразованиях перестает подгружаться «css». Как следствие преобразованные ссылки теряют таблицы стилей и выглядят не читабельно. В чем закономерность понять пока не могу. Буду рад любым комментариям.
Автор: koderr
Дата сообщения: 24.04.2009 09:21
Поставил для эксперимента Apache/1.3.41 (Win32), решил поиграть с mod_rewrite. Но почему-то не работает даже простейшая конструкция, причем в логах никаких ошибок нет.

В чем может быть проблема?

.htaccess: [more]Options +FollowSymLinks

RewriteEngine On
RewriteBase /

RewriteRule ^(.+)\.m3u$ /cgi-bin/printenv.pl?$1.m3u [R,L] [/more]

httpd.conf: [more]...
LoadModule rewrite_module modules/mod_rewrite.so
...
AddModule mod_rewrite.c
...
AccessFileName .htaccess

RewriteLog "logs/rewrite.log"
...[/more]
Автор: Cheery
Дата сообщения: 24.04.2009 18:26
koderr
ну, а rewritelog что говорит?


Автор: koderr
Дата сообщения: 24.04.2009 19:20
Cheery
Пусто, 0 байт. Такое ощущение, что модуль вообще не работает. Хотя загружен.
Автор: Cheery
Дата сообщения: 24.04.2009 19:27
koderr

Цитата:
Пусто, 0 байт. Такое ощущение, что модуль вообще не работает.

а RewriteLogLevel установили? по умолчанию он 0, то есть не пишет..
на время поставьте 9
но только на время, иначе файл станет огромным
Автор: koderr
Дата сообщения: 24.04.2009 19:28
Полный httpd.conf

upd:
Да, 9 стоит.
Автор: Cheery
Дата сообщения: 24.04.2009 22:06
koderr
в какой папке htaccess?
Автор: koderr
Дата сообщения: 24.04.2009 22:14
Cheery
в DocumentRoot.

upd:
Проблема решилась после прочтения Apache FAQ, всем спасибо
Автор: DmitryV
Дата сообщения: 10.05.2009 11:07
Если не трудно подскажите можно ли перенаправить подобные запросы на хост от куда они приходят или заблокировать?

98.77.97.148 - - [07/May/2009:17:05:25 +0400] "t\xd6\xca\xe4\xf1\xa3\xado\xb1G\xcc4\xbdb\xa7\xa5\x16_P\xd8;\b\xc0\xeb\xa0z\xd7%5\x8c_\xb9*\xdf\x16\xbbn" 400 315
200.32.196.33 - - [07/May/2009:17:07:12 +0400] "y\xbc~\xcc_\x97*\xd6Z\x83/\x93+\x05\x15Y\xe9Ns\xc4P\xb7n\xb4~\xce\xda\xc1\xc0" 501 320
95.220.55.212 - - [07/May/2009:17:07:55 +0400] "qU\xfe\xe5 \xa0\xf6\xcb0\xb2\x1c,Bjyqf" 400 315
77.167.65.141 - - [07/May/2009:17:08:21 +0400] "\x9d\xd8>-\xb9\xf4T\xd7\x83\xc0\xb3N[\x8e\xfd\x8d,^\xa5\x1e\xb7\xeb\xc9\xd6Zc" 501 320
93.80.186.150 - - [07/May/2009:17:08:49 +0400] "d\xee\xcf].E\x83\x15FE^\xf2" 501 303
85.172.119.79 - - [10/May/2009:11:42:57 +0400] "\r\xc6\x12\xd5\xea\x05\xcb\x040J\xc3\x11\x18\x80\xa1\x04\x8b\xb5\x1e\x0c\x8f\\\x02\xc0`\xf0" 400 226

если да то можно пример, заранее спасибо
Автор: Cheery
Дата сообщения: 10.05.2009 22:49
DmitryV
вы зачем дублируете свой вопрос???

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

глупостями только не страдайте.. зачем?

Цитата:
или заблокировать?

чем они вам мешают?

у вас запущен на том же хосте torrent клиент или сервер?
это похоже http://en.wikipedia.org/wiki/Bencode
Автор: DmitryV
Дата сообщения: 11.05.2009 09:13
Cheery

Цитата:
чем они вам мешают?

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

Цитата:
вы зачем дублируете свой вопрос

Вопрос не дублирован в 1 вопрос что это такое и возможные решения возможно не средствами апача, а в этой теме вопрос можно ли решить это используя средства mod_rewrite

Цитата:
у вас запущен на том же хосте torrent клиент или сервер?

нет не запущен на этом хосте, это на рабочем хосте где только www висит, при том он не прописан ни в 1 dns сервере просто по IP для некоторых, подобное появилось недели 2 назад и имеет место быть до сих пор..


Автор: Cheery
Дата сообщения: 11.05.2009 18:13
DmitryV

Цитата:
Вопрос не дублирован в 1 вопрос что это такое и возможные решения возможно не средствами апача, а в этой теме вопрос можно ли решить это используя средства mod_rewrite

все равно дубль


Цитата:
иногда такого мусора сыпится каждую минуту по несколько десятков запросов.. хочется от них избавится...
позавчера вообще за ночь закидали по полной.. лог раздуло до 5 метров...

ну так настройте, чтобы не вносились в логи
что нить вида (настроить под свои нужды)
SetEnvIfNoCase Request_URI "\\x[0-9a-z_]" nolog

и когда указываете запись в логи, то
CustomLog logs/access_log.%Y-%m-%d combined env=!nolog



Цитата:
нет не запущен на этом хосте, это на рабочем хосте где только www висит

но IP у них одинаков? я же говорю, похоже на запросы от torrent клиентов.
Автор: DmitryV
Дата сообщения: 13.05.2009 20:19
Cheery

Цитата:
но IP у них одинаков?

нет не одинаков.. совсем машина в другом месте и там ничего кроме 80 порта не открыто.. и SSH прописан на доступ с 1 только хоста
Автор: phwerwolf
Дата сообщения: 05.06.2009 05:31
Есть ссылки вида file.htm, нужно чтобы эти файлы открывались по такой ссылке read.html?file.htm.
Написал такое правило:
RewriteRule ^read\.html?(.*)$     /dir/$1
Но оно почему-то вместо того чтобы возвращать /dir/file.htm возвращает просто /dir/, в чем может быть проблема?
При таком правиле
RewriteRule ^read\.html?(.*)$     /dir/$0 - выдает 500 еррор.
Автор: AXVill
Дата сообщения: 01.09.2009 10:09
Что-то совсем голова кругом от мод_реврайт =)
Подскажите где грабли.

.htaccess

Код: php_flag magic_quotes_gpc Off
php_value session.use_trans_sid 0
php_flag allow_call_time_pass_reference On

RewriteEngine On
Options +FollowSymlinks

RewriteCond %{REQUEST_URI} ^/image/([0-9a-z-]+)/([0-9a-z_-]+)
RewriteRule ^image/([0-9a-z_-]+)/([0-9a-z_-]+)$ /image.php?item=$1&item_id=$2 [L]
Автор: israel_rider
Дата сообщения: 10.09.2009 07:56
Мне очень важно понять.
Допустим, для корневой директории сайта существует хотя бы одна директива RewriteRule.
Вопрос.
Правильно ли, что тогда, в случае, если адрес сайта, набраный в браузере, не попадает ни под одно правило RewriteRule, поиск будет вестись бесконечно, произойдёт зацикливание?
Иными словами, правильно ли, что начиная создавать директивы RewriteRule для корневой директории сайта, я должен в этих правилах предусмотреть все возможные варианты написания адреса? Ну.. написать в крайнем случае (.*) .
Автор: Cheery
Дата сообщения: 10.09.2009 07:58
israel_rider
поиск чего? Если ни одно из правил не подходит - все будет так, как если бы этих правил не было вообще
Автор: israel_rider
Дата сообщения: 10.09.2009 07:58
Еще вопрос. Если можно. Как получить rewrite.log ?

Добавлено:

Цитата:
Если ни одно из правил не подходит - все будет так, как если бы этих правил не было вообще

Да? Это очень важно для меня. Дело в том, что изучая модуль RewriteRule я вычитал, что поиск ведётся , пока не будет найдено соответствующее правило. И поэтому есть опасность зацикливания. Я очень этому удивился, и поэтому задал вопрос, что бы уточнить.

Страницы: 1234567891011

Предыдущая тема: Защита от атак: выбор фаервола и антивируса для сисадмина


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