将apache重写规则(.htaccess)转换为nginx

时间:2013-01-04 21:31:22

标签: apache mod-rewrite nginx

背景

我想在运行nginx的Ubuntu Server上设置Bugify。我按照说明操作,安装了依赖项,安装成功。输入许可证密钥并单击“安装Bugify”后,它会重定向到http://dev.mysite.com/login?new,我唯一看到的是404 Not Found

我知道nginx不受官方支持,但根据support forum,应该可以运行它。

问题:

在webapp的公共目录中有一个带有重写规则的.htaccess文件,我猜导致404错误的问题是nginx无法使用.htaccess文件,所以我会必须将重写规则转换为nginx语法。

我对apache的重写规则并不熟悉,所以我需要一些帮助来解决这个问题。

.htaccess文件的内容是:

# Rewriting
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

我使用this tool来转换规则,但是-标志遇到了一些麻烦。

#ignored: "-" thing used or unknown variable in regex/rew

提前致谢!

1 个答案:

答案 0 :(得分:1)

Bugify使用Zend Framework,因此ZF的重写规则也适用于Bugify。我已经从http://wiki.nginx.org/Zend_Framework

复制了下面建议的nginx配置
server {
  listen 80;
  server_name www.example.com;
  root /var/www/www.example.com/myapplication;
  index  index.html index.htm index.php;

  location / {
    # This is cool because no php is touched for static content
    try_files $uri $uri/ /index.php;
  }

  location ~ \.php$ {
    fastcgi_pass      unix:/usr/local/zend/tmp/php-fastcgi.socket;
    fastcgi_index    index.php;
    fastcgi_param   SCRIPT_FILENAME /var/www/www.example.com/myapplication$fastcgi_script_name;
    include               fastcgi_params;
  }
}