如何在PHP中使用路径而不是GET变量



我以前问过这个问题,但由于错误的原因,这个问题被关闭了。

从本质上讲,我的文件夹中包含一个PHP文件{dynamic}/blog/index.php

我如何才能让别人访问example.com/folders/{dynamic}/blog/unique,就好像它是一个真正的HTML/PHP文件一样?

本质上,unique是一个名为id的唯一GET变量,代表example.com/folders/{dynamic}/blog?id=unique

{dynamic}可以是任何东西,因为folders下有数百个不同的文件夹,所以我不能为每个文件夹创建单独的规则。

我使用的是NGINX,所以无法编辑.htaccess文件-如何使用NGINX?

因此,这必须适用于除少数文件外的所有文件。

有些ID(大约5个(应该指向它们的真实文件名,而不是动态GET变量。

例如,example.com/folders/{dynamic}/blog/example表示目录中名为example.php的实际文件

您可以使用以下重写规则根据您的期望配置

location / {
rewrite ^/folders/(.*)/blog/example$ /folders/$1/blog/example.php last;
rewrite ^/folders/(.*)/blog/(.*)$ /folders/$1/blog/index.php?id=$2;
}

注意:与example.php一样,对于您希望指向其真实文件名的其他特定ID(约5个(,您可以根据需要编写重写规则。

上述配置将解决如下问题。我在本地中测试了这个

Request Url  : http://localhost/folders/a/blog/hello
Resolved Url : http://localhost/folders/a/blog/index.php?id=hello
Request Url  : http://localhost/folders/b/blog/hello
Resolved Url : http://localhost/folders/b/blog/index.php?id=hello
Request Url  : http://localhost/folders/a/blog/example
Resolved Url : http://localhost/folders/a/blog/example.php
Request Url  : http://localhost/folders/b/blog/example
Resolved Url : http://localhost/folders/b/blog/example.php

最新更新