Nginx

從 Apache 遷移到 NGINX - 配置更改

  • October 8, 2020

我正在嘗試將舊網站從 Apache 遷移到 Nginx,但我無法將 htaccess 文件重寫為 nginx 配置。

目前的htaccess:

<IfModule mod_rewrite.c>
RewriteEngine on
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*) $1.php?rewrite=$2 [QSA]
</IfModule>

我已經嘗試過這個 nginx 配置(已經嘗試了很多修改但沒有任何效果):

   location ~ \.php(/|$) {
   #try_files $uri $uri/ $uri?rewrite=$args; # Not working
   try_files $uri $uri.php $uri?rewrite=index.php; # not working
   #try_files = $document_uri.php?rewrite=$args; #  not working
   fastcgi_pass localhost:8003;
}

我錯過了什麼?

這些“工作”都不起作用,因為您location在 .htaccess 中指定的正則表達式與您在 Apache 的 .htaccess 中指定的正則表達式不同,並且您沒有嘗試在 .htaccess 中使用它的匹配項try_files

對於您發布的 .htaccess ,這樣的內容應該更合適:

location ~ ^(.*)/(.*) {
   try_files $uri $1.php?rewrite=$2&$args =404;
}

這具有以下效果:首先嘗試靜態文件,然後嘗試匹配的 PHP 腳本,否則返回 404。

請注意,您不是fastcgi_pass在這裡,而是在另一個location專門用於處理 PHP 文件。

location ~ \.php$ {
   #...fastcgi config
}

如果可能,您應該考慮重構應用程序以使用正確的前端控制器。這也將降低您的 nginx 配置的複雜性。

引用自:https://serverfault.com/questions/1036951