启用永久链接和无扩展 php 路由在 Nginx 中不起作用
Enabling both permalinks and extensionless php routing not working in Nginx
我的 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 ^(.*)$ .php last;
}
}
我在 Ubuntu 服务器 运行 的 Nginx 上安装了 WordPress。
我有一个名为 Resume 的导航菜单,该菜单指向 example.com/resume 并显示一个实际上是 myname_resume.pdf 的 pdf 文件,但我已将 resume.php 在根目录中,此 php 脚本获取 myname_resume.pdf 的内容并将其显示为 pdf 文件。
我希望我的 url 永远不要附加任何文件扩展名 .pdf 或 .php 无论是否你们任何人都可以明确地写 url.php 并且它会给出相同的结果,因此我已经这样做了。当我输入以下代码时,extensionless-php
的配置工作正常:
if (!-e $request_filename)
{
rewrite ^.*$ /index.php last;
}
因为我安装了 WordPress,所以我想为在 WordPress 上创建的页面提供永久链接 example.com/contact 并且为了启用永久链接,我必须添加上面的小配置。现在永久链接正在打开,但 mydomain.com/resume 出现 404 错误。如何启用它们,或者有什么好的方法可以实现相同的目的吗?
而不是将 .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;
}
参见 this caution 关于 if
的使用。
我的 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 ^(.*)$ .php last;
}
}
我在 Ubuntu 服务器 运行 的 Nginx 上安装了 WordPress。
我有一个名为 Resume 的导航菜单,该菜单指向 example.com/resume 并显示一个实际上是 myname_resume.pdf 的 pdf 文件,但我已将 resume.php 在根目录中,此 php 脚本获取 myname_resume.pdf 的内容并将其显示为 pdf 文件。
我希望我的 url 永远不要附加任何文件扩展名 .pdf 或 .php 无论是否你们任何人都可以明确地写 url.php 并且它会给出相同的结果,因此我已经这样做了。当我输入以下代码时,extensionless-php
的配置工作正常:
if (!-e $request_filename)
{
rewrite ^.*$ /index.php last;
}
因为我安装了 WordPress,所以我想为在 WordPress 上创建的页面提供永久链接 example.com/contact 并且为了启用永久链接,我必须添加上面的小配置。现在永久链接正在打开,但 mydomain.com/resume 出现 404 错误。如何启用它们,或者有什么好的方法可以实现相同的目的吗?
而不是将 .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;
}
参见 this caution 关于 if
的使用。