大约 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 后端,要么只是允许将它们发送给用户。
作为免责声明,由于我不知道您的软件环境,所以我无法测试这些规则,因此这些规则可能无法满足您的要求,或者它们可能会在某些部分失败。