我有一个 PHP 旧项目,正在尝试对其进行现代化改造。旧项目的路由只是服务器上的文件,您可以通过 URL 访问这些文件。
例如,放置在 中的文件folder/subfolder/file.php
将与 url 匹配https://example.com/folder/subfolder/file.php
。相当标准的东西。
新的路由系统将涉及 URL 重写,其中所有请求都被重定向到一个中心点(通常是index.php
),然后 PHP 在内部决定如何处理它们。
不幸的是,两种路由方法必须同时存在。弃用的旧版 URL 将重定向301 PERMANENT
到新 URL。例如,https://example.com/shop/class/api.php
将(理想情况下)重定向到https://example.com/shop/api/v1/shop
及其所有查询参数。
假设我有一个简单的文件夹结构,如下所示
- index
- index.php
所有新 URL 都应重定向到此文件夹。此文件夹的文件优先级始终为DirectoryIndex index.php index.html
。
重定向本身很简单
Redirect 301 /shop/class/api.php /index/api/v1/shop
下一步,我不知道该怎么做,而且我的谷歌搜索也帮不上忙,具体如下:
我只想重写
index
文件夹的 URL,否则旧的 URL 将不再起作用。我想
index
从 URL 中删除部分,只保留尾部(重定向发生后)。例如,重定向到之后的部分被/shop/class/api.php
删除,只保留部分。/index/api/v1/shop
index
/api/v1/shop
答案1
FallbackResource /index.php
这就是你所需要的。
任何对不存在文件的请求都将被路由到该文件,而现有的路径和文件将照常得到答复。
这是当前处理具有虚拟 URL 的请求的主控制器文件的方法,例如 php 通常所做的那样。