【问题标题】:How to rewrite .php extension to no ending on Nginx?如何在 Nginx 上将 .php 扩展名重写为没有结尾?
【发布时间】:2019-05-17 08:54:45
【问题描述】:

我正在尝试将我的 php 文件运行在没有以浏览器结尾的 .php 扩展名的情况下,并将所有文件重定向到非 .php

我已经设置好了,两者都可用。在浏览器上使用 .php 而没有 .php。但现在只需要重写。

你能帮我解决他们的问题吗?

location / {
        try_files $uri $uri $uri/ @extensionless-php;
    }

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

最好的问候

【问题讨论】:

  • 你试过这个答案stackoverflow.com/a/21911610/8828489吗?
  • 没有这个也一样:location / { index index.html index.htm index.php; } location ~ \.php$ { try_files $uri =404; } - 其中index index.html index.htm index.php; 已经在根目录中定义并且不认为try_files 是为了重写^^ 在我这边只是从.php 到没有的重写是不见了。

标签: php nginx url-rewriting


【解决方案1】:

您大概有一个location ~ \.php 块来处理以.php 结尾的URI。您应该在该块中包含try_files $uri =404; 语句以避免passing uncontrolled requests to PHP

您还可以向该块添加 internal 指令,这将阻止外部访问 .php URI,这样只有您的无扩展 PHP URI 才能工作。详情请见this document

例如:

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

如果您想在无意中出现以.php 结尾的 URI 时重定向浏览器以使用无扩展名 PHP,您需要查看原始请求 URI,否则您将面临重定向循环的风险。

例如:

if ($request_uri ~ \.php($|\?))
{
    rewrite ^(.*)\.php$ $1 permanent;
}

请参阅this caution 了解if 的使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    相关资源
    最近更新 更多