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

» Apache+mod_rewrite

Автор: xntx
Дата сообщения: 07.07.2004 02:26
lynx
насколько я понял, ЭТО заставляет юзера послать запрос на другой адрес
Цитата:
Sends an external redirect asking the client to fetch a different URL


Цитата:
The new URL is returned to the client which attempts to fetch it again with the new address.

а мне нужно сделать так, как будто бы эта папка просто не существует.
Автор: lynx
Дата сообщения: 07.07.2004 03:11
Так. Давай еще раз. Что должен делать реврайт? Реврайт переписывает запросы.

Например при запросе index.html выдает figvam.html

Какой у тебя запрос на какой должен быть переписан?

Автор: xntx
Дата сообщения: 07.07.2004 03:31
lynx
у меня запрос типа "что-угодно" (точка) должен переписываться в 404.php
Автор: lynx
Дата сообщения: 07.07.2004 04:05
xntx

Цитата:
у меня запрос типа "что-угодно" (точка) должен переписываться в 404.php


RewriteEngine on
RewriteLog "путь/rewrite.log"
RewriteLogLevel 0
RewriteRule ^/*.$ $1/papka/404.php


Автор: xntx
Дата сообщения: 07.07.2004 04:15
lynx
честно говоря ни.... не понял.
в "путь/rewrite.log я просто прописал "реврайт.лог", пусть пишет тут-же, так можно?
а в какой папке должен лежать этот htaccess?
у меня кстати 404.php в той-же лежит
и откуда берется $1 если там нигде скобки нет?
вобщем мой апач, как я ему это не пихаю, молчит (тоесть запросы типа http://localhost/lang/something не перенаправляет на 404.php)
Автор: Daiz13
Дата сообщения: 07.07.2004 11:58
Хочу чтобы все запросы к сайту обрабатывал один скрипт, поэтому пытаюсь все запросы перенаправить на него, естественно реально существующие папки из перенаправления нужно исключить. Пробую так:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/images/
RewriteCond %{REQUEST_URI} !^/css/
RewriteRule ^main$ - [L]
RewriteRule (.*) /main/ [L]

но получаю только "Internal Server Error"
Автор: lynx
Дата сообщения: 07.07.2004 17:42
xntx

Цитата:
в "путь/rewrite.log я просто прописал "реврайт.лог", пусть пишет тут-же, так можно?


Ну, если Апач не ругаетсся, то можно, но лучше указывать полный путь, не урл, а путь, от корня /


Цитата:
а в какой папке должен лежать этот htaccess?


Ну, из какой хочешь, чтобы работало.


Цитата:
у меня кстати 404.php в той-же лежит


Цитата:
RewriteRule ^/*.$ $1/404.php



Цитата:
и откуда берется $1 если там нигде скобки нет?


Если хочешь понять, как это работает, то читай доки в первом посте.

Daiz13

Цитата:
но получаю только "Internal Server Error"


Это означает, что само правило реврайта тут не при чем, а ошибся ты где-то в синтаксисе Апача. Во первых, посмотри логи Апача - что пишется там.
Во вторых, дай реврайту логи писать, может он из-за этого обижается.
И поставь логЛевел 9 на время тестирования - увидишь ошибки в своем правиле.


RewriteLog "/путь/rewrite.log"
RewriteLogLevel 9
Автор: xntx
Дата сообщения: 07.07.2004 17:49
lynx
прописал:

Цитата:
RewriteEngine on
RewriteLog "/www/logs/rewrite.log"
RewriteLogLevel 0
RewriteRule ^/*.$ $1/404.php

не работает

прописал:

Цитата:
RewriteEngine on
RewriteLog "s:/www/logs/rewrite.log"
RewriteLogLevel 0
RewriteRule ^/*.$ $1/404.php

не работает.

прописал:

Цитата:
RewriteEngine on
RewriteLog "s:\www\logs\rewrite.log"
RewriteLogLevel 0
RewriteRule ^/*.$ $1/404.php

не работает.
.htaccess и 404.php лежат в s:\www\htdocs\lang


Цитата:
Если хочешь понять, как это работает, то читай доки в первом посте.

прочтал:

Цитата:
RewriteRule обратные_связи: Это обратные связи вида
$N

(0 <= N <= 9) предоставляющие доступ к сгруппированным частям (в круглых скобках!) шаблона из соответствующей директивы RewriteRule (единственной, следующей сразу за текущим набором директив RewriteCond).

тоесть, работает как в обычном перловском RegExp... все равно не пойму откуда берется...
Автор: lynx
Дата сообщения: 07.07.2004 19:05
xntx

Я прописала себе в конфиге для DocumentRoot


Цитата:
RewriteEngine on
RewriteLog "путь/rewrite.log"
RewriteLogLevel 0
RewriteRule ^/*.$ $1/error/error.html


И у меня все работает....

пропиши LogLevel 9
и посмотри, что не работает

Добавлено
Просто может у тебя не все директивы разрешены в .htaccess
Сначала добейся работы в конфиге, а потом будешь выносить в .htaccess

Или пропиши для папки:

AllowOverride all
Автор: xntx
Дата сообщения: 08.07.2004 15:10
lynx
мдяя, было AllowOverride None.
но час отчасу не легче, прописал, теперь хтакцесс работает, но выдает 500...

Добавлено
апач в логах пишет:

Цитата:
[Thu Jul 08 14:52:41 2004] [alert] [client 127.0.0.1] S:/www/htdocs/lang/.htaccess: RewriteLog not allowed here
Автор: lynx
Дата сообщения: 08.07.2004 16:06
xntx

Цитата:
S:/www/htdocs/lang/.htaccess: RewriteLog not allowed here


Реврайт_лог здесь не разрешен
Автор: xntx
Дата сообщения: 08.07.2004 16:38
lynx
да догадался я, а что же с ним сделать?
закомментнул обе строки с RewriteLog, так он не реврайтит...
я собственно говоря нашел другой путь, можно поставить 403 на всю папку, а как эррордокумент прописать 404.php, но дело прЫнцЫпа, надо добить реврайты, потому что в дальнейшем нужны для работы скрипта...
Автор: Cheery
Дата сообщения: 08.07.2004 16:53
xntx

Цитата:
да догадался я, а что же с ним сделать?

ничего.. такое в htaccess не прописывается..
http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteLog

Цитата:
Context: server config, virtual host
Автор: xntx
Дата сообщения: 08.07.2004 17:57
lynx
Cheery
большое спасибо! вроде работает
ЗЫ: я еще вернусь
Автор: ZiLot
Дата сообщения: 27.07.2004 12:28
WindowsXP. Apache 1.3 или 2.0 - не важно, везде результаты одинаковы.
В httpd.conf раскомментирую подключение модуля mod_rewrite. Файл модуля существует.

В httpd.conf в настройках вирт. хоста пишу:

Цитата:
RewriteLog N:/home/zilot/rewrite.log
RewriteLogLevel 9


Если в .htaccess пишу следующее:

Цитата:
RewriteEngine On
RewriteRule /test.html /index.php

то при вызове test.html получаю:

Цитата:
403 - Forbidden
You don't have permission to access /test.html on this server.

В лог попадает:

Цитата:
127.0.0.2 - - [27/Jul/2004:13:02:56 +0400] [zilot/sid#956320][rid#96a5b8/initial] (2) init rewrite engine with requested uri /test.html
127.0.0.2 - - [27/Jul/2004:13:02:56 +0400] [zilot/sid#956320][rid#96a5b8/initial] (1) pass through /test.html


Далее - убираю .htaccess
Пишу в настройках виртуального хоста в httpd.conf это же:

Цитата:
RewriteEngine On
RewriteRule /test.html /index.php

Перезапускаю Апач. При вызове test.html получаю:

Цитата:
400 - Bad Request
Your browser sent a request that this server could not understand.

В лог идет следующее:

Цитата:
127.0.0.2 - - [27/Jul/2004:13:06:56 +0400] [zilot/sid#954350][rid#96a5f0/initial] (2) init rewrite engine with requested uri /test.html
127.0.0.2 - - [27/Jul/2004:13:06:56 +0400] [zilot/sid#954350][rid#96a5f0/initial] (3) applying pattern '/test.html' to uri '/test.html'
127.0.0.2 - - [27/Jul/2004:13:06:56 +0400] [zilot/sid#954350][rid#96a5f0/initial] (2) rewrite /test.html -> /index.php
127.0.0.2 - - [27/Jul/2004:13:06:56 +0400] [zilot/sid#954350][rid#96a5f0/initial] (2) local path result: /index.php


Видимо дело в том, что в httpd.conf надо писать полные пути. Вопрос на засыпку - как?
В какую сторону копать? Весь день изучал идущие с Апачем доки - ничерта не нашел REwriteBase - это поможет отцу русской демократии?
И еще - как все же заставить его обрабатывать директивы mod_rewrite в .htaccess ? Ведь потом на хостинге у меня не будет доступа к апачевскому конфигу, а хочется полной совместимости.
Автор: Cheery
Дата сообщения: 27.07.2004 15:40
ZiLot

Цитата:
Если в .htaccess пишу следующее:

для данной диры сначала нужно было разрешить allowoverride FileInfo
тогда и не будет 403 ошибки.

Цитата:
Видимо дело в том, что в httpd.conf надо писать полные пути. Вопрос на засыпку - как?

не обязательно..

Цитата:
В какую сторону копать? Весь день изучал идущие с Апачем доки - ничерта не нашел REwriteBase - это поможет отцу русской демократии?

ну дана же наверху (в шапке темы) ссылка на русский ресурс.. очень хорошо там написано.
если не используешь какие то условия, а просто перекидываешь, что достаточно просто.
redirect /test.html /index.php
но и это должно работать..

Цитата:
RewriteRule /test.html /index.php

посмотри логи сервера.. напиши после /index.php [R] и посмотри, что будет в адресной строке и логах.
Автор: ZiLot
Дата сообщения: 27.07.2004 19:07
Cheery

Цитата:
для данной диры сначала нужно было разрешить allowoverride FileInfo
тогда и не будет 403 ошибки.

Уже прописано
AllowOverride All

Дописывание [R] в конце RewriteRule - ничего не меняет. В логах все то же самое.


Цитата:
если не используешь какие то условия, а просто перекидываешь, что достаточно просто.
redirect /test.html /index.php

нет, это просто пример, на котором пытаюсь заставить работать mod_rewrite. Просто редирект в дальнейшей задаче не поможет.
Автор: Cheery
Дата сообщения: 27.07.2004 19:13
ZiLot

Цитата:
Дописывание [R] в конце RewriteRule - ничего не меняет. В логах все то же самое.

[R] меняет то, что теперь браузеру выкидывается 302 заголовок и он уже идет дальше.
и логи не rewrite, а access..

Цитата:
нет, это просто пример, на котором пытаюсь заставить работать mod_rewrite. Просто редирект в дальнейшей задаче не поможет.

тогда попробуй так.

Цитата:
RewriteRule ^/test.html(.*) /index.php$1

но у меня работает и так, как указано ранее..
Автор: xntx
Дата сообщения: 30.07.2004 13:29
хм, люди, вот что надо, а не получается: чтоб все урлы корня, тоесть /xntx /someuser /lalala перекатывались в /user.php?param=xntx итп.
и чтоб /images, /admin, /tpl и файлы типа /file.php не заменялись

Добавлено
для начала попробовал:
RewriteRule ^/(.+)$ /user.php?param=$1
но не работает
попробовал:
RewriteRule ^/user/(.+)$ /user.php?param=$1
тоже нет
а во так:
RewriteRule ^user/(.+)$ /user.php?param=$1
да, тогда попробовал:
RewriteRule ^(.+)$ /user.php?param=$1
получаем сервер эррор
Автор: Cheery
Дата сообщения: 30.07.2004 20:56
xntx
RewriteCond %{REQUEST_URI} !^/images/.* [OR]
RewriteCond %{REQUEST_URI} !^/admin/.* [OR]
RewriteCond %{REQUEST_URI} !^/tpl/.* [OR]
RewriteCond %{REQUEST_URI} !^/user\.php.*
RewriteRule ^/(.+)$ /user.php?param=$1

зы: не проверял.
Автор: xntx
Дата сообщения: 31.07.2004 02:59
неа, не работает, ввожу: localhost/xntx и выдает 404...
Автор: Cheery
Дата сообщения: 31.07.2004 04:37
xntx

Цитата:
неа, не работает, ввожу: localhost/xntx и выдает 404...

вот решение

Код:
RewriteRule ^/images(.*)$ /images$1 [skip=5]
RewriteRule ^/admin(.*)$ /admin$1 [skip=4]
RewriteRule ^/tpl(.*)$ /tpl$1 [skip=3]
RewriteRule ^/(.*)\.php$ /$1.php [skip=2]
RewriteRule ^/(.*)$ /user.php?param=$1
Автор: ZiLot
Дата сообщения: 31.07.2004 09:07
Cheery

Цитата:
тогда попробуй так.

Цитата:RewriteRule ^/test.html(.*) /index.php$1

но у меня работает и так, как указано ранее..

Я меня, как только добавляю в .htaccess строку RewriteEngine On - при открытии любого url'а на этом хосте, вылетает 403.
Т.е. до RewriteRule дело даже не доходит...
Автор: xntx
Дата сообщения: 31.07.2004 12:55
Cheery
http://192.168.0.1/xntx

Цитата:
strip per-dir prefix: S:/www/htdocs/xntx -> xntx
applying pattern '^/images(.*)$' to uri 'xntx'
strip per-dir prefix: S:/www/htdocs/xntx -> xntx
applying pattern '^/admin(.*)$' to uri 'xntx'
strip per-dir prefix: S:/www/htdocs/xntx -> xntx
applying pattern '^/tpl(.*)$' to uri 'xntx'
strip per-dir prefix: S:/www/htdocs/xntx -> xntx
applying pattern '^/(.*)\.php$' to uri 'xntx'
strip per-dir prefix: S:/www/htdocs/xntx -> xntx
applying pattern '^/(.*)$' to uri 'xntx'
pass through S:/www/htdocs/xntx

почемуто у "xntx" нет слэша спереди

ZiLot
а что еще есть в .htaccess ?
Автор: ZiLot
Дата сообщения: 31.07.2004 13:37
xntx

Цитата:
а что еще есть в .htaccess ?

Ничего. Хотя в принципе, остальные директивы работают. Пока не работали только директивы mod_rewrite
Автор: Cheery
Дата сообщения: 31.07.2004 18:39
ZiLot

Цитата:
Я меня, как только добавляю в .htaccess строку RewriteEngine On - при открытии любого url'а на этом хосте, вылетает 403.
Т.е. до RewriteRule дело даже не доходит...

для диры должно быть разрешено Allowoverride Fileinfo
посмотрел бы в error.log - там так и сказано.
xntx

Цитата:
почемуто у "xntx" нет слэша спереди


Цитата:
RewriteRule ^/(.*)$ /user.php?param=$1

на
RewriteRule ^(.*)$ /user.php?param=$1
и будет
Автор: xntx
Дата сообщения: 31.07.2004 18:56
Cheery

Цитата:
на
RewriteRule ^(.*)$ /user.php?param=$1
и будет

дык я ж о том и говорю, что говорит мол server configuration error

Цитата:
да, тогда попробовал:
RewriteRule ^(.+)$ /user.php?param=$1
получаем сервер эррор

Автор: Cheery
Дата сообщения: 31.07.2004 19:01
xntx

Цитата:
RewriteRule ^(.*)$ /user.php?param=$1

сравни с

Цитата:
RewriteRule ^(.+)$ /user.php?param=$1

у меня первое работает.
при запуске говорит? или уже при запросе?
Автор: xntx
Дата сообщения: 31.07.2004 19:08
Cheery
у меня не работает ни первый ни второй вариант
выдает 500 при запросе
Автор: Cheery
Дата сообщения: 31.07.2004 19:10
xntx

Цитата:
у меня не работает ни первый ни второй вариант

в чем пишешь? в httpd.conf или htaccess?
и какая версия апача?

Страницы: 1234567891011

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


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