自定义 URL 的 Nginx 和 PHP

自定义 URL 的 Nginx 和 PHP

想知道是否有人可以帮助我解决设置自定义网址时遇到的问题

目前有一个 AWS EC2 实例,我已经在其上安装了 Nginx 和 PHP(FPM)作为 Web 服务器,并且我已将其配置为可以正常使用常规文件,但是我被要求提供传输到该 Web 服务器的自定义 url 文件(所有这些文件都存储在 DB 表中)。

作为一个相对较新的 NGINX 爱好者,我从线程中尝试了一些方法,但不确定我是否找到了正确的东西。

最终,为了满足自定义 URL 的需求,我半作弊地让 PHP 完成所有的准备工作:

error_page 404 /404.php;

让 404.php 文件读取 URL 并尝试在各种数据库表中查找它,然后重定向到加载正确内容的专用文件。我已经对个人资料和博客进行了此操作,并使用 javascript 来欺骗 URL,使其看起来像是面向客户的,因为他们直接http://fake-site.com/cool-guy-profile.html

然而它不能正确索引,因为它是谷歌的 404,我希望能够正确地做到这一点。

如何在服务器块中正确地编写一条规则,该规则规定/URL 中第一个之后的任何 $request_uri 在内部都会转到一个文件(如 php 文件),并在保持原始请求 URI 的同时执行其业务。

例如

用户输入https://fake-site.com/some-custom-profile-url.html,nginx 捕获 / 之后的任何内容并将其传递给 php 文件,该文件使用 /some-custom-profile-url.html 来查找并显示正确的信息,同时保留原始 url。

糟糕的总结

fake-site.com/custom-url.html --> nginx --> php 文件呈现内容 --> 返回为 fake-site.com/custom-url.html

目的

因此,由博客 cms 或用户配置文件创建的内容可以具有由 Google 编入索引的自定义 url,并且不使用我当前使用 404 故障文件来捕获未找到的 url 的方法。

答案1

您只需向您的 nginx 配置添加重写规则,例如:

    location /php/ {
      rewrite ^/php/(.*)  /ghp_rewr.php?$1;
    }

任何以 /php/ 开头的请求都将传递给名为 ghp_rewr.php 的 php 脚本,并且原始 URL 减去 /php/ 将作为 QUERY_STRING 传递(尽管没有必要这样做,但 php 也可以使用 REQUEST_URI)。

不要重定向!

答案2

nginx实现PHP处理未找到的URL的方式是:

try_files $uri $uri/ /path/to/404.php;

这指示 nginx 首先检查文件系统上是否存在实际 URI。如果不存在,则请求将传递给 PHP 文件,然后 PHP 文件可以执行任何操作。

相关内容