2011-11-20 44 views
1

我需要转换这个的.htaccess规则nginx的规则:转换这个阿帕奇重写规则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

使用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

+0

嗯,虽然你关于不使用'if'的观点是有效的,但是我所关心的是获得一组工作规则。我不认为在这一点上最好的nginx语法的问题是一个问题,因为nginx几乎不可能是PHP应用程序的瓶颈。不幸的是,你的建议语法给出了一个错误,说'HTTP_X_REQUESTED_WITH:$ http_x_requested_with;'是不知道的 – qliq

+0

如果不是'优化'的问题不使用,如果没有做你期望的事情,它会替换位置......有问题的行是我从你的例子中复制的唯一的,删除它。你有没有试过fastcgi_param? – regilero