LINUX.ORG.RU

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/search/(.*)$ /cgi-bin/search.cgi?q=$1 [QSA,L]
</IfModule>

RewriteCond %{REQUEST_FILENAME} !-d
или
RewriteCond %{REQUEST_FILENAME} !-f
Можно не указывать - тогда если будет существовать каталог /search и в нём будут существовать файлы/каталоги, то будет срабатывать правило переброса на cgi. Если указать, то правило переброса будет срабатывать только для несуществующих файлов/каталогов.

Кстати, а зачем тебе через [R]?

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

Это не то
тут ты перебрасываешь с
/search/жужужу на /cgi-bin/search.cgi?q=жужужу

мне нужно на оборот
прикрыть старую ссылку
чтобы приходя по внешней ссылке на /cgi-bin/search.cgi?q=жужужу
происходил редирект на
/search/жужужу

fMad ★★★
() автор топика
Ответ на: комментарий от Slavaz

[R] нужна за тем
чтобы поисковики больше не заходили на
/cgi-bin/search.cgi?q=жужужу
увидев редирект они станут ходить по новому пути

fMad ★★★
() автор топика
Ответ на: комментарий от fMad

Понял. Извини, Илья, за невнимательность.
Попробуй так:

RewriteBase /cgi-bin/search.cgi
RewriteRule ^/cgi-bin/search.cgi?q=(.*)$ /search/$1 [R]

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz


3 RewriteBase /cgi-bin/
4 RewriteCond %{REQUEST_URI} ffcms/blog.cgi$
5 RewriteCond %{QUERY_STRING} ^(id|q)=([0-9]{1,4})$
6 RewriteRule blog.cgi$ http://rekoweb.ru/blog/%1/%2 [R]

а в результате получаю
http://rekoweb.ru/blog/id/76?id=76

?id=76 - не отсекается, и ни где не видно в логах rewrite
не понимаю, как оно пролазит сквозь =([0-9]{1,4})

fMad ★★★
() автор топика
Ответ на: комментарий от fMad

ща, у себя съэмулирую... Писал по памяти и навскидку...

Slavaz ★★★★★
()
Ответ на: комментарий от fMad

Гм.. странно - у меня работает. Может, тестовые данные не совпадают... Тем не менее, отчет:

http_root="/srv/web/subsites/test"
mkdir -p $http_root/cgi/ffcms

mkdir -p $http_root/id

echo "NO..." >$http_root/cgi/ffcms/blog.cgi
echo "YES!!!!" >$http_root/id/76

cat >$http_root/.htaccess <<EOF
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /cgi/
RewriteCond %{REQUEST_URI} ffcms/blog.cgi$
RewriteCond %{QUERY_STRING} ^(id|q)=([0-9]{1,4})$
RewriteRule blog.cgi$ http://test.slavaz.home/%1/%2 [R]
</IfModule>
EOF

То есть, разница только в cgi(вместо cgi-bin) и в названии сайта

Выдаёт "YES!!!!"

Давай теперь апачи сравним.
$ rpm -q httpd
httpd-2.2.9-1.fc8


Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

ну 1
у тебя просто cgi-bin
а у меня script-alias
тоесть www/.htaccess его не перекрывает, приходится .htaccess ложить в cgi-bin

curl "http://www.rekoweb.xxx/cgi-bin/python/ffcms/blog.py?id=43";
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://rekoweb.ru/blog/id/43?id=43">here</a>.</p> ;
<hr>
<address>Apache/2.2.8 (Ubuntu) DAV/2 mod_python/3.3.1 Python/2.5.2 PHP/5.2.4-2ubuntu5.3 with Suhosin-Patch Server at www.rekoweb.xxx Port 80</address>
</body></html>

и вот что в tail -20 /home/httpd/rekoweb.ru/rewrite.log

192.168.80.76 - - [11/Oct/2008:01:29:30 +0400] [www.rekoweb.xxx/sid#80c2f90][rid#8a0ece8/initial] (3) [perdir /home/httpd/ffsdmad.ru/cgi-bin/] strip per-dir prefix: /home/httpd/ffsdmad.ru/cgi-bin/python/ffcms/blog.py -> python/ffcms/blog.py
192.168.80.76 - - [11/Oct/2008:01:29:30 +0400] [www.rekoweb.xxx/sid#80c2f90][rid#8a0ece8/initial] (3) [perdir /home/httpd/ffsdmad.ru/cgi-bin/] applying pattern 'blog.py(.*)$' to uri 'python/ffcms/blog.py'
192.168.80.76 - - [11/Oct/2008:01:29:30 +0400] [www.rekoweb.xxx/sid#80c2f90][rid#8a0ece8/initial] (4) [perdir /home/httpd/ffsdmad.ru/cgi-bin/] RewriteCond: input='/cgi-bin/python/ffcms/blog.py' pattern='python/ffcms/blog.py$' => matched
192.168.80.76 - - [11/Oct/2008:01:29:30 +0400] [www.rekoweb.xxx/sid#80c2f90][rid#8a0ece8/initial] (4) [perdir /home/httpd/ffsdmad.ru/cgi-bin/] RewriteCond: input='id=43' pattern='^(id|q|m)=([0-9]{1,4})$' => matched
192.168.80.76 - - [11/Oct/2008:01:29:30 +0400] [www.rekoweb.xxx/sid#80c2f90][rid#8a0ece8/initial] (2) [perdir /home/httpd/ffsdmad.ru/cgi-bin/] rewrite 'python/ffcms/blog.py' -> 'http://rekoweb.ru/blog/id/43'
192.168.80.76 - - [11/Oct/2008:01:29:30 +0400] [www.rekoweb.xxx/sid#80c2f90][rid#8a0ece8/initial] (2) [perdir /home/httpd/ffsdmad.ru/cgi-bin/] explicitly forcing redirect with http://rekoweb.ru/blog/id/43
192.168.80.76 - - [11/Oct/2008:01:29:30 +0400] [www.rekoweb.xxx/sid#80c2f90][rid#8a0ece8/initial] (2) [perdir /home/httpd/ffsdmad.ru/cgi-bin/] trying to replace prefix /home/httpd/ffsdmad.ru/cgi-bin/ with /cgi-bin/
192.168.80.76 - - [11/Oct/2008:01:29:30 +0400] [www.rekoweb.xxx/sid#80c2f90][rid#8a0ece8/initial] (1) [perdir /home/httpd/ffsdmad.ru/cgi-bin/] escaping http://rekoweb.ru/blog/id/43 for redirect
192.168.80.76 - - [11/Oct/2008:01:29:30 +0400] [www.rekoweb.xxx/sid#80c2f90][rid#8a0ece8/initial] (1) [perdir /home/httpd/ffsdmad.ru/cgi-bin/] redirect to http://rekoweb.ru/blog/id/43?id=43 [REDIRECT/302]

fMad ★★★
() автор топика
Ответ на: комментарий от fMad

Хех, всё гениальное - просто. :)

У тебя строка:
RewriteRule blog.cgi$ http://rekoweb.ru/blog/%1/%2 [R]

измени её:
RewriteRule blog.cgi$ http://rekoweb.ru/blog/%1/%2? [R]

То есть нужно добавить знак вопроса в конец (но перед флагами).

По поводу cgi и cgi-bin - разница есть, но в нашем случае она оказалась несущественной... впрочем, как знать, жду твоего рапорта об успехе/неудаче...

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

вот, довольно просто всё

9 RewriteBase /cgi-bin/
10 RewriteCond %{THE_REQUEST} GET\ /cgi-bin/python/ffcms/(portal|techprom|galax|tpolis).py\??(r|p)?=?([0-9]{1,4})?
11 RewriteRule (portal|techprom|galax|tpolis).py$ /%1/%2/%3 [R]

но в конце опять дописывать ?QUERY_STRING

fMad ★★★
() автор топика
Ответ на: комментарий от fMad

замена? [R]
решила проблему добавления ?QUERY_STRING
за то открыла больше проблем :)
в назидание потомкам: для отладки mod_rewrite включите логи
RewriteLog /tmp/rewrite.log
RewriteLogLevel 9

fMad ★★★
() автор топика
Ответ на: комментарий от fMad

мнэ... Я уже теряюсь в вариантах и примерах от тебя - все разные :)

Если возвратиться ко второму варианту:

RewriteBase /cgi-bin/
RewriteCond %{REQUEST_URI} ffcms/blog.cgi$
RewriteCond %{QUERY_STRING} ^(id|q)=([0-9]{1,4})$
RewriteRule blog.cgi$ http://rekoweb.ru/blog/%1/%2 [R]

То смена RewriteRule на
RewriteRule blog.cgi$ http://rekoweb.ru/blog/%1/%2? [R]

Помогла?

P.S. Пришли к одному результату разными путями?

Slavaz ★★★★★
()
Ответ на: комментарий от fMad

вот примерчик, сработанный сейчас
вот перебрасываю с реального на виртуальный
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /cgi-bin/
RewriteCond %{THE_REQUEST} GET\ /cgi-bin/python/ffcms/blog.py\??(id|m)?=?([0-9]{1,4})?
RewriteRule blog.py$ /blog/%1/%2? [R]
</IfModule>

а вот виртуальный подменяю реальным
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^blog/(com|stat|id|m|q)/([^/]+) /cgi-bin/python/ffcms/blog.py?$1=$2 [L]
</IfModule>
тоесть паук идёт по старой ссылке, а там apache говорит ему, страницы нет, перемещена вот сюда, он забывает старю ссылку идёт по новой
а пользователям вообще пофиг

fMad ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.