2011-11-20 70 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