我正在尝试将运行symfony框架的php网站迁移到nginx和php over fastcgi。
从http://wiki.nginx.org/开始使用Symfony howto一切正常,但我遇到了自定义重写规则的问题。
我的目标是将 / aaaa 形式的网址重写为 / view / shorthand / aaaa 。然后应该通过php和symfony对请求进行处理。
旧的apache重写规则:
RewriteRule ^([0-9a-f]+)$ index.php/view/shorthand/$1 [L]
我试过的Nginx规则:
rewrite ^/([0-9a-f]+)$ /view/shorthand/$1 break;
rewrite ^/([0-9a-f]+)$ /index.php/view/shorthand/$1 break;
他们都被发送到fastcgi但 request_uri 似乎仍然是 / aaaa ,因为我收到此错误:
FastCGI sent in stderr: "Action "aaaa/index" does not exist" while reading response header from upstream
我也尝试过使用try_files而没有任何运气。请指教。
答案 0 :(得分:12)
问题在于默认的FastCGI变量集(fastcgi_params
配置文件),其中REQUEST_URI
等于nginx的$request_uri
。但是,如果您仔细阅读Nginx documentation,就会发现$request_uri
和$uri
变量之间存在差异。
$request_uri
=完整的原始请求URI(带参数)$uri
=请求中的当前URI,规范化 $uri
的值可能会在请求处理期间发生变化,例如进行内部重定向时,或使用索引文件时。因此,如果您想在传递给PHP之前修复REQUEST_URI
值,只需将$request_uri
更改为$uri?$args
中的fastcgi_params
即可。
这是Nginx领导开发人员Igor Sysoev recommends in the official mailing list的方式。