将此Apache重写转换为Nginx规则

时间:2011-11-20 06:05:02

标签: apache nginx rewrite

我需要将此.htaccess规则转换为nginx规则:

RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ navigation.php
RewriteRule .* - [E=HTTP_X_REQUESTED_WITH:%{HTTP:X-Requested-With}]

我使用了this在线转化工具,它提供了:

if (!-f $request_filename){
    set $rule_0 1$rule_0;
}
if (!-d $request_filename){
    set $rule_0 2$rule_0;
}
if ($rule_0 = "21"){
    rewrite ^/(.*)$ /navigation.php;
}
     HTTP_X_REQUESTED_WITH:$http_x_requested_with;
#ignored: "-" thing used or unknown variable in regex/rew 

但结果在nginx 0.76中无法使用,我收到错误

unknown directive "setenv" 

当我从我的nginx配置中删除最后一行时,脚本无法显示某些页面。

所以如果你能做转换,我真的很感激。

1 个答案:

答案 0 :(得分:1)

使用Nginx,您无需像在Apache中那样重新映射。

你有没有看过IfIsEvil nginx页面?

要在nginx中应用规则之前测试文件不是静态文件或目录,真正简单的方法不是多方式 - 如果你喜欢,而是try_file指令(check if file exists in pitfall page)。

所以你应该从那个“规则”开始:

server {
  root /var/www/domain.com;
  location / {
    HTTP_X_REQUESTED_WITH:$http_x_requested_with;
    try_files $uri $uri/ /navigation.php;
  }
}

现在你可能有其他一些地方通过fastcgi处理PHP文件,这可能是你需要将HTTP_X_REQUESTED_WITH作为fastcgi_param传输的真实地方。