我目前使用的代码是
^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/puphpet/puphpet.com/web/$1
适用于正确的网址,例如http://puphpet.dev/app_dev.php/github-btn
如果网址有多个斜杠,则会传递两个斜杠,http://puphpet.dev/app_dev.php//github-btn
多个斜杠打破了我的网站。我知道nginx有一些东西可以将多个斜杠合并在一起,但是无法找到与httpd类似的东西。我已经为比赛尝试了多个正则表达式,但它们似乎并没有像我期望的那样工作。
例如,(.*\.php)(/)(.*)
将上述网址与
$1
/app_dev.php
$2
/
$3
/ github-btn
所以我认为将$1$3
传递给代理会起作用,但是它没有。
在ProxyPassMatch的正则表达式上跳了一下之后,我最终得到了这个:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
ProxyPassMatch /(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/puphpet/puphpet.com/web/$1
通过重定向到单个URL来修复URL中的双斜杠。但是,在我看来,一个全新的要求并不是最优的解决方案。透明地重写下面所有进一步匹配的URL是最好的。