Apache 重写url将查询字符串转换为目录路径并从url中删除cgi脚本文件名和路径
我试图重写:Apache 重写url将查询字符串转换为目录路径并从url中删除cgi脚本文件名和路径,apache,.htaccess,mod-rewrite,apache2,darcs,Apache,.htaccess,Mod Rewrite,Apache2,Darcs,我试图重写:repo.pointfree.net/darcsweb/darcsweb.cgi?r=remixbot;a=摘要 例如,repo.pointfree.net/remixbot/summary/ …但是url显然没有被重写(当我访问repo.pointfree.net时,我得到错误403禁止)。这是我在/home/public/werc/sites/repo.pointfree.net中的.htaccess: DirectoryIndex darcsweb/darcsweb.cgi R
repo.pointfree.net/darcsweb/darcsweb.cgi?r=remixbot;a=摘要
例如,repo.pointfree.net/remixbot/summary/
…但是url显然没有被重写(当我访问repo.pointfree.net时,我得到错误403禁止
)。这是我在/home/public/werc/sites/repo.pointfree.net中的.htaccess
:
DirectoryIndex darcsweb/darcsweb.cgi
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule ^/darcsweb/darcsweb.cgi /darcsweb/%1/%2?
以下是/home/public/
中的.htaccess
:
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的符号链接
在此方面的任何帮助都将不胜感激
谢谢,
安德烈亚斯
编辑,在应用Andreas Gohr的建议并访问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(短路?):
为什么在你的URL中有一个分号应该是一个符号
repo.pointfree.net/darcsweb/darcsweb.cgi?r=remixbot;a=summary
难道上述情况不应该发生吗
repo.pointfree.net/darcsweb/darcsweb.cgi?r=remixbot&a=summary
还有,这个规则怎么样
RewriteRule ^darcsweb/darcsweb.cgi?r=(.+)&a=(.+)$ /$1/$2/
作为一种调试帮助,请尝试删除“重写条件”以确保它没有问题。在我看来,您的“重写”操作是错误的。如果我理解正确,您希望能够使用repo.pointfree.net/remixbot/summary/这样的URL访问真正的repo.pointfree.net/darcsweb/darcsweb.cgi?r=remixbot;a=摘要
您的重写应该如下所示:
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:您可能想考虑使用简单的DARCS CGI。< /P>
RewriteRule ^\/(.+?)\/(.+?)\/? /darcsweb/darcsweb.cgi?r=$1;a=$2 [QSA,L]
RewriteRule ^\/darcsweb\/darcsweb.cgi?r=(.+?);a=(.+?) /$1/$2/ [QSA,R]