如何在 Nginx 配置中使用轉換後的 .htaccess 文件?
大約 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 後端,或者只是允許將它們發送給使用者。
作為免責聲明,由於我不了解您的軟體環境,因此我無法測試這些規則,因此這些規則可能無法滿足您的要求,或者某些部分可能會失敗。