在Nginx

时间:2018-01-18 15:16:23

标签: php wordpress nginx permalinks

我的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错误。如何启用它们或是否有任何好的方法来实现相同的目标?

1 个答案:

答案 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