The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
помогите с mod_rewrite, !*! serg, 14-Мрт-10, 02:22  [смотреть все]
Здравствуйте!
Помогите составить правило mod_rewrite для httpd.conf

Должна обрабатываться форма по POST и по GET скриптом http://site.ru/cgi-bin/script.pl?param1¶m2 но с другим URL в action:

<form action="http://site.ru/news/param1/param2/" method="post">
<input typr="submit">
</form>

Структура каталогов сервера:
ls -la site.ru/

drwxr-xr-x logs
    error_log
    access_log

drwxr-xr-x docs
    index.html

drwxr-xr-x cgi-bin
    script.pl

Заранее благодарен!

  • помогите с mod_rewrite, !*! serg, 18:53 , 17-Мрт-10 (1)
    ну хоть скажите "RTFM", а то 3 дня тишина...
    • помогите с mod_rewrite, !*! cuad0, 04:20 , 19-Мрт-10 (2)
      >ну хоть скажите "RTFM", а то 3 дня тишина...

      RTFM )

      Не забывай, в общем виде GET-урлы имеют вид
      /?var1=val1&var2=val2&var3=val3...
      у POST-ов урлы нормальные, без этого кавардака.
      впрочем, если в script.pl форма парсится вручную, то на правильный формат можно забить болт с высокой колокольни.

      Задача mod_rewrite - переписывать url запроса. На этом можно организовать ЧПУ, например.
      Это было бы понятно для обычных страниц на сайте, чтобы юзер в браузере видел что-то вроде site.com/news/latest или /news/2010/01/01 и не нервничал из-за обилия &, =, + и, возможно, A%20B%FD%A8%92..

      Но в данном случае, можно задуматься, а стоит ли городить ЧПУ для субмита форм. Если форма субмитит POST-ом, то юзер все равно увидит только site.com/script.pl. С GET-ом сложнее, но такова его природа. А mod_rewrite из GET-запроса сделать POST не сможет.

      Если данная форма - это универсальная добавлялка контента (где сам контент POST-ится, а параметры, описывающие к чему этот контент относится указаны в виде ЧПУ в action формы), то про GET можно забыть.
      И в итоге задача сводится к переводу урла /news/param1/param2 в get-вид к script.pl.
      Можно, конечно, в форму накидать hidden-ов, в них указать все эти news, param* и не париться в mod_rewrite, а тупо POST-ить на script.pl, но если уж хочется побаловаться...

      В общем, составляем регулярку, которой последовательно превращаем /news... в /script.pl?... Но помни, ровно в полночь url превратится в ...)) Помни, что регулярка - это конечный автомат и если заранее неизвестно, сколько может быть param-ов в урле, то волшебства не получится (на всех может back-reference-ов не хватить, да и вообще все зависнет...). А если всегда столько же, по пофиг.

      Надо что-то навроде #/(.+)/(.+)/(.+)#/script.pl?\1&\2&\3# (или как-то так, тут может надо будет обуздать жадность квантификаторов).
      Это, ессно, не формат mod_rewrite (мне лень :) ) и вообще тут может быть написана полная туфта, сходная с тем, что я генерил, когда только открыл книжку по регуляркам. Но мне простительно, т.к. предыдущий рабочий день был тяжелым, я зае... устал, сейчас 4 утра и я еще не сплю :)))
      Но, надеюсь, общее направление я указал. RTFM ;)
      Можно perldoc perlre, можно книжку "Регулярные выражения", можно гугл.

      • помогите с mod_rewrite, !*! serg, 07:07 , 21-Мрт-10 (3)
        Спасибо за ответ!

        >Это было бы понятно для обычных страниц на сайте, чтобы юзер в
        >браузере видел что-то вроде site.com/news/latest или /news/2010/01/01 и не нервничал из-за
        >обилия &, =, + и, возможно, A%20B%FD%A8%92..
        >

        вообще я хочу это использовать, чтобы скрыть технологию, а именно cgi-bin/script.pl

        • помогите с mod_rewrite, !*! cuad0, 16:02 , 22-Мрт-10 (4)
          >Спасибо за ответ!
          >
          >>Это было бы понятно для обычных страниц на сайте, чтобы юзер в
          >>браузере видел что-то вроде site.com/news/latest или /news/2010/01/01 и не нервничал из-за
          >>обилия &, =, + и, возможно, A%20B%FD%A8%92..
          >>
          >
          >вообще я хочу это использовать, чтобы скрыть технологию, а именно cgi-bin/script.pl

          Так сделайте action="http://site.com/post" method="POST" в форме,
          а в .htaccess что-то типа
          RewriteRule ^post$ /cgi-bin/script.pl [L,QSA]
          насчет флагов - лень глядеть правильно ли, брал из похожего примера

          • помогите с mod_rewrite, !*! serg, 02:29 , 25-Мрт-10 (5)
            Спасибо за ответ!

            >RewriteRule ^post$ /cgi-bin/script.pl [L,QSA]

            Вот так не получается в том-то и дело, он ищет cgi-bin после DocumentRoot
            DocumentRoot у меня /home/site.ru/docs

            • помогите с mod_rewrite, !*! cuad0, 13:16 , 25-Мрт-10 (6)
              >Спасибо за ответ!
              >
              >>RewriteRule ^post$ /cgi-bin/script.pl [L,QSA]
              >
              >Вот так не получается в том-то и дело, он ищет cgi-bin после
              >DocumentRoot
              >DocumentRoot у меня /home/site.ru/docs

              Прямой вызов в браузере /cgi-bin/script.pl работает?
              А ScriptAlias /cgi-bin/ "/full/path" задан?
              А <Directory> для каталога cgi-bin?
              Если RewriteRule не работает, почитайте про флаги ([L,QSA]), может эти вам не подходят.

              • помогите с mod_rewrite, !*! serg, 04:42 , 26-Мрт-10 (7)
                Спасибо за ответ!

                >Прямой вызов в браузере /cgi-bin/script.pl работает?

                работает

                >А ScriptAlias /cgi-bin/ "/full/path" задан?

                да, /home/site.ru/cgi-bin

                >Если RewriteRule не работает, почитайте про флаги ([L,QSA]), может эти вам не
                >подходят.

                rewrite срабатывает, но он пытается перекинуть на скрипт в каталоге /home/site.ru/docs/cgi-bin/script.pl вместо /home/site.ru/cgi-bin/script.pl

                • помогите с mod_rewrite, !*! cuad0, 11:37 , 26-Мрт-10 (8)

                  >rewrite срабатывает, но он пытается перекинуть на скрипт в каталоге /home/site.ru/docs/cgi-bin/script.pl вместо
                  >/home/site.ru/cgi-bin/script.pl

                  Смотрите и проверяйте настройки апача.
                  А cама форма, случаем не находится на странице site.ru/docs/bla-bla.html? Тогда action формы и свой RewriteRule в студию.
                  Еще читайте в доках апача про ScriptAliasMatch, может вам и его хватит.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру