Переписать URL, превратив строку запроса в путь к каталогу и удалив имя файла и путь сценария cgi из URL - PullRequest
1 голос
/ 21 февраля 2011

Я пытаюсь переписать: repo.pointfree.net/darcsweb/darcsweb.cgi?r=remixbot;a=summary

, например, repo.pointfree.net/remixbot/summary/.

... но URL, по-видимому, не переписывается (когда я посещаю repo.pointfree.нет, я получаю Error 403 Forbidden).Вот мой .htaccess в /home/public/werc/sites/repo.pointfree.net:

DirectoryIndex darcsweb/darcsweb.cgi
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule ^/darcsweb/darcsweb.cgi /darcsweb/%1/%2?

Вот этот .htaccess в /home/public/:

Options +ExecCGI
AddHandler cgi-script .cgi
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{HTTP_HOST} !^repo\.pointfree\.net$
RewriteRule (.*) /home/public/werc/sites/%{HTTP_HOST}/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /home/public/werc/bin/werc.cgi

RewriteRule /werc.cgi /f5/pointfree/public/werc/bin/werc.cgi
ErrorDocument 404 /werc.cgi

У меня есть символическая ссылка в / home / public/werc/sites/repo.pointfree.net/ to / home / public / darcsweb с именем darcsweb

любая помощь по этому вопросу будет оценена.

Спасибо, Андреас

РЕДАКТИРОВАТЬ , после применения предложения Андреаса Гора и посещения repo.pointfree.net/remixbox/summary/ я получил это в своем лог-файле и на странице 404 в браузере.

[Mon Feb 21 00:15:28 2011] [error] [client 172.17.0.144] NOT FOUND: repo.pointfree.net/favicon.ico - http://repo.pointfree.net/remixbot/summary/ - Uzbl (Webkit 1.2) (Linux i686 [i686]), referer: http://repo.pointfree.net/remixbot/summary/
[Mon Feb 21 00:15:28 2011] [error] [client 172.17.0.144] repo.pointfree.net/favicon.ico - Uzbl (Webkit 1.2) (Linux i686 [i686]) - GET - tpl_handler lib/404.tpl - lib/default_master.tpl, referer: http://repo.pointfree.net/remixbot/summary/

икогда я копирую favicon.ico в / home / public /, я получаю:

[Mon Feb 21 00:17:46 2011] [error] [client 172.17.0.131] NOT FOUND: repo.pointfree.net/remixbot/summary/ -  - Uzbl (Webkit 1.2) (Linux i686 [i686])
[Mon Feb 21 00:17:47 2011] [error] [client 172.17.0.131] repo.pointfree.net/remixbot/summary/ - Uzbl (Webkit 1.2) (Linux i686 [i686]) - GET - tpl_handler lib/404.tpl - lib/default_master.tpl

Я также посмотрел на вывод rewrite_log, и нет упоминания о darcsweb (короткое замыкание?):

172.17.0.131 - - [21/Feb/2011:03:49:13 +0000] [repo.pointfree.net/sid#286c26a0][rid#2a43a058/subreq] (2) [perdir /f5/pointfree/public/] strip document_root prefix: /f5/pointfree/public/werc/bin/werc.cgi -> /werc/bin/werc.cgi
172.17.0.131 - - [21/Feb/2011:03:49:13 +0000] [repo.pointfree.net/sid#286c26a0][rid#2a43a058/subreq] (1) [perdir /f5/pointfree/public/] internal redirect with /werc/bin/werc.cgi [INTERNAL REDIRECT]
172.17.0.131 - - [21/Feb/2011:03:49:13 +0000] [repo.pointfree.net/sid#286c26a0][rid#2a43a058/subreq] (2) [perdir /f5/pointfree/public/] rewrite 'index.cgi' -> '/home/public/werc/bin/werc.cgi'
172.17.0.131 - - [21/Feb/2011:03:49:13 +0000] [repo.pointfree.net/sid#286c26a0][rid#2a43a058/subreq] (2) [perdir /f5/pointfree/public/] rewrite '/home/public/werc/bin/werc.cgi' -> '/f5/pointfree/public/werc/bin/werc.cgi'
172.17.0.131 - - [21/Feb/2011:03:49:13 +0000] [repo.pointfree.net/sid#286c26a0][rid#2a43a058/subreq] (2) [perdir /f5/pointfree/public/] strip document_root prefix: /f5/pointfree/public/werc/bin/werc.cgi -> /werc/bin/werc.cgi
172.17.0.131 - - [21/Feb/2011:03:49:13 +0000] [repo.pointfree.net/sid#286c26a0][rid#2a43a058/subreq] (1) [perdir /f5/pointfree/public/] internal redirect with /werc/bin/werc.cgi [INTERNAL REDIRECT]
172.17.0.131 - - [21/Feb/2011:03:49:13 +0000] [repo.pointfree.net/sid#286c26a0][rid#2a43a058/subreq] (2) [perdir /f5/pointfree/public/] rewrite 'index.pl' -> '/home/public/werc/bin/werc.cgi'
172.17.0.131 - - [21/Feb/2011:03:49:13 +0000] [repo.pointfree.net/sid#286c26a0][rid#2a43a058/subreq] (2) [perdir /f5/pointfree/public/] rewrite '/home/public/werc/bin/werc.cgi' -> '/f5/pointfree/public/werc/bin/werc.cgi'
172.17.0.131 - - [21/Feb/2011:03:49:13 +0000] [repo.pointfree.net/sid#286c26a0][rid#2a43a058/subreq] (2) [perdir /f5/pointfree/public/] strip document_root prefix: /f5/pointfree/public/werc/bin/werc.cgi -> /werc/bin/werc.cgi
172.17.0.131 - - [21/Feb/2011:03:49:13 +0000] [repo.pointfree.net/sid#286c26a0][rid#2a43a058/subreq] (1) [perdir /f5/pointfree/public/] internal redirect with /werc/bin/werc.cgi [INTERNAL REDIRECT]
172.17.0.132 - - [21/Feb/2011:03:49:13 +0000] [repo.pointfree.net/sid#286c26a0][rid#2a5f0058/initial] (1) [perdir /f5/pointfree/public/] pass through /f5/pointfree/public/favicon.ico

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Мне кажется, что вы переписали неправильно.Если я вас правильно понимаю, вы хотите использовать URL-адрес, например repo.pointfree.net/remixbot/summary/, чтобы получить доступ к тому, что действительно repo.pointfree.net/darcsweb/darcsweb.cgi?r=remixbot;a=summary

Ваше переписывание должно выглядеть примерно так:

RewriteRule ^\/(.+?)\/(.+?)\/?   /darcsweb/darcsweb.cgi?r=$1;a=$2 [QSA]

Однако это только половина дела.Он сообщит Apache, где искать, когда такой запрос будет опубликован, но не скажет вашему приложению создать эти красивые URL-адреса.Если вы не хотите взломать CGI (или у него есть опция для этого), вы, вероятно, ничего не сможете сделать.

За исключением ... может быть, перенаправление сработает:

RewriteRule ^\/(.+?)\/(.+?)\/?   /darcsweb/darcsweb.cgi?r=$1;a=$2 [QSA,L]
RewriteRule ^\/darcsweb\/darcsweb.cgi?r=(.+?);a=(.+?) /$1/$2/ [QSA,R]

Это может привести к перенаправлению на чистый URL-адрес каждый раз, когда вы щелкаете ссылку в своем приложении ...

PS: вы можете рассмотреть возможность использования http://blitiri.com.ar/p/darcsweb/ вместо простого CGI darcs.

1 голос
/ 21 февраля 2011

Почему в вашем URL стоит точка с запятой, где это должен был быть знак амперсанда?

repo.pointfree.net/darcsweb/darcsweb.cgi?r=remixbot;a=summary

не должно быть выше

repo.pointfree.net/darcsweb/darcsweb.cgi?r=remixbot&a=summary

Кроме того, как насчет этого RewriteRule?

RewriteRule ^darcsweb/darcsweb.cgi?r=(.+)&a=(.+)$ /$1/$2/

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

...