Nginx

如何在 Nginx 配置中使用轉換後的 .htaccess 文件?

  • July 9, 2018

大約 5 天我試圖啟動我的網站但沒有任何成功。問題是我在本地使用 apache,我的網站在本地執行良好,我的伺服器使用 nginx,我無法在 nginx 配置中使用 .htaccess 轉換。

這是我的網站結構的簡化:

/mywebsite
   /application
   /files
       file1.php
       .htaccess
   /public
       /css
       /js
.htaccess

看?我有兩個.htaccess文件。一個位於根目錄,另一個位於files目錄內。這一切都在本地主機上執行,因為我在本地主機上使用apache。現在我需要讓它在使用nginx的伺服器上工作。

我使用這個網站將 htaccess 文件的內容轉換為 nginx-configuration。

首先,我應該將轉換結果粘貼到什麼文件中?(nginx配置文件在哪裡/etc/nginx/nginx.conf??)

我該如何處理這兩個.htaccess文件?我也應該製作兩個 nginx 文件嗎?


.htaccess根目錄下的文件:

RewriteEngine on
Options -Indexes

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([\s\S]*)$ index.php?rt=$1 [L,B,QSA]

ErrorDocument 404 /error404.html

Options -Indexes

<Files *.php>
   Order Deny,Allow
   Deny from all
   Allow from ::1
</Files>

<Files index.php>
   Order Allow,Deny
   Allow from all
</Files>

.htaccess目錄內的files文件:

<Files *.php>
  Allow from all
</Files>

在 nginx 中,所有特定於站點的配置都包含在一個server塊中,並且location塊用於為特定 URL 添加不同的配置指令。

總體而言,其原理與 Apache2 有很大不同,因此您需要研究它以了解如何使用它進行類似的配置。

在您的情況下,nginx 配置指令可能如下所示:

location / {
   try_files $uri $uri/ /index.php?rt=$request_uri;
}

location ~ \.php$ {
   deny all;
}

location ^~ /index.php {
   # include here the configuration items from nginx default location ~  \.php$ block
}

location ^~ /files {
   # include here either PHP configuration directives from location ~ \.php$ block if you want PHP scripts executed from here. If you do not want PHP scripts to be executed, then use
   allow all;
}

這些指令要麼包含在主要的 nginx 配置中,要麼包含在/etc/nginx/sites-available目錄下的特定於站點的配置中。

關於塊的一些解釋:

第一個location塊是 nginx 上的標準前端控制器模式實現。這意味著 nginx 首先檢查是否在伺服器上的某處找到所需的文件,如果存在則伺服器它。否則,它將請求發送到index.php,並將原始請求 URI 部分作為參數發送到?rt。這與您的實現略有不同,因為您使用正則表達式來限製作為參數傳遞的可能 URI。

第二個location塊拒絕訪問所有以 .php$ 結尾的 URI。

第三個塊添加了一個異常index.php,使用 PHP 後端處理。

第四個塊將 PHP 腳本請求發送到 PHP 後端,或者只是允許將它們發送給使用者。

作為免責聲明,由於我不了解您的軟體環境,因此我無法測試這些規則,因此這些規則可能無法滿足您的要求,或者某些部分可能會失敗。

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