Apache-2.2
需要幫助將此 htaccess 重寫規則轉換為 Nginx
嗨 - 我已經為此苦苦掙扎了好幾天。這看起來很簡單,但我就是做不到。
我有一個用 CakePHP 開發的網站。有一個響應的腳本
/css/profiles/g/whatever.css
(“whatever”是什麼,它實際上是一個傳遞給動作的參數),它回顯生成的 CSS 並將其保存到/css/profiles/whatever.css
.我在 Apache 中有一條規則,它接受請求
/css/profiles/whatever.css
,如果它不存在,則重寫請求/css/profiles/g/whatever.css
而不重定向,因此客戶端永遠不會注意到它是由腳本響應並且文件不存在。這就是我在 Apache 中所擁有的:
# Profile CSS rules RewriteCond %{REQUEST_URI} ^/css/profiles/ RewriteCond %{REQUEST_URI} !/css/profiles/g/ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^css/profiles/(.*)$ /css/profiles/g/$1 [L] # CakePHP's default rules RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,L]
現在我將站點移動到帶有 Nginx 的伺服器上,到目前為止,我得到了這個:
# Profile CSS rules location ~ ^/css/profiles/(?!g/)(.*)$ { if (!-f $request_filename) { rewrite ^/css/profiles/(.*)$ /css/profiles/g/$1 last; break; }
}
# CakePHP's default rules location / {
嘗試文件 $ uri $ uri //index.php? $ uri& $ 參數;}
條件似乎有效,因為如果我去
/css/profiles/whatever.css
列印 PHP 的$_SERVER
變數,它會給我[QUERY_STRING] => /css/profiles/g/whatever.css&
注意
&
. 這意味著它到達了該try_files
部分並將 . 添加$uri
到查詢字元串中,並且它具有正確的$uri
.但…
[REQUEST_URI] => /css/profiles/whatever.css
這就是故障。似乎它並沒有真正改變
$request_uri
CakePHP 需要控制什麼控制器參與什麼。任何幫助將不勝感激。
謝謝。
所以我終於讓它工作了:
location ~ ^/css/profiles/(?!g/)(.*)$ { set $new_uri /css/profiles/g/$1; if (!-f $request_filename) { rewrite ^/css/profiles/(.*)$ /css/profiles/g/$1 last; } }
…最後:
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; ... some other stuff were here related to fastcgi fastcgi_param PATH_INFO $new_uri; # <--- I added this }