如何使用NGINX从url中删除.php和.html扩展名?

2022-08-30 09:29:37

我希望我的nginx显示所有网址都很干净。

通过一些研究,我提出了第一个有效的案例。这是通过以下配置完成的:

location / {
    root   html;
    index  index.html index.htm index.php;
    try_files $uri.html $uri/ =404; 
}

它适用于 indexhtml.html显示为 indexhtml,但.php没有任何反应。如果我$uri.html更改为$uri.php,它既不适用于.html,也不适用于.php。我试图在php位置放置类似的东西,但没有成功。

有什么建议吗?


答案 1

根据我的研究,如果你附加你的/etc/nginx/conf.d/domain.tld.conf文件,包括:

location / {
    try_files $uri $uri.html $uri/ @extensionless-php;
    index index.html index.htm index.php;
}

location ~ \.php$ {
    try_files $uri =404;
}

location @extensionless-php {
    rewrite ^(.*)$ $1.php last;
}

然后重新启动nginx并尝试一下。希望这对你有所帮助!更多信息可以在这里找到(我在哪里找到它)@tweaktalk.net


答案 2

不需要额外的块和命名位置和一切。同时将线条移到位置块之外index

server {
  index index.html index.php;
  location / {
    try_files $uri $uri/ $uri.html $uri.php$is_args$query_string;
  }
  location ~ \.php$ {
    try_files $uri =404;
    # add fastcgi_pass line here, depending if you use socket or port
  }
}

请记住,如果您在同一文件夹中有一个文件夹和一个同名文件,并且如果该文件夹包含 or ,您将无法运行 php 文件,请记住这一点。/folder/xyz//folder/xyz.phpxyzindex.phpindex.html


推荐