我的nginx.conf
文件如下:
server {
...
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name mydomain.com;
if (!-e $request_filename)
{
rewrite ^.*$ /index.php last;
}
location / {
try_files $uri $uri/ @extensionless-php;
}
location ~ \.php$ {
try_files $uri =404;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
}
我在运行Ubuntu服务器的Nginx上安装了WordPress。
我有一个名为Resume的导航菜单,指向example.com/resume并显示一个实际 myname_resume.pdf 的pdf文件,但我已经推出了 resume.php 在根目录中,这个php脚本获取 myname_resume.pdf 的内容,并将其显示为pdf文件。
我希望我的网址永远不会附加任何文件扩展名 .pdf 或 .php ,无论你是否有人能够明确地写url.php并且它会给出相同的结果因此我做到了这一点。当我推出这段代码时,extensionless-php
的这种配置工作正常:
if (!-e $request_filename)
{
rewrite ^.*$ /index.php last;
}
当我安装了WordPress时,我想永久链接在WordPress上创建的页面为example.com/contact,并且为了启用永久链接,我必须添加上面的小配置。现在永久链接正在打开,但mydomain.com/resume正在给出404错误。如何启用它们或是否有任何好的方法来实现相同的目标?
答案 0 :(得分:0)
不是将.php
附加到任何不存在的文件 - 而是可以更改逻辑,以便仅在PHP文件实际存在时才将.php
附加到URI。
例如:
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
if (-f $request_filename.php) {
rewrite ^ $uri.php last;
}
rewrite ^ /index.php last;
}
location ~ \.php$ {
try_files $uri =404;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
有关使用if
的信息,请参阅this caution。