如何在 Nginx 配置中使用转换后的 .htaccess 文件?

如何在 Nginx 配置中使用转换后的 .htaccess 文件?

大约 5 天以来,我一直在尝试启动我的网站,但都没有成功。问题是我在本地使用 apache,我的网站在本地运行良好,而我的服务器使用 nginx,我无法在 nginx 配置中使用 .htaccess 转换。

以下是我的网站结构的简化:

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

看到了吗?我有两个.htaccess文件。一个位于根目录,另一个位于files目录内。它们都在本地主机上运行,​​因为我使用阿帕奇在本地主机上。现在我需要让它在使用的服务器上运行nginx

我用本网站将 htaccess 文件的内容转换为 nginx 配置。

首先,我应该把转换的结果粘贴到什么文件中?(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>

答案1

在 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 后端,要么只是允许将它们发送给用户。

作为免责声明,由于我不知道您的软件环境,所以我无法测试这些规则,因此这些规则可能无法满足您的要求,或者它们可能会在某些部分失败。

相关内容