php - 使用 MySQL 创建 .htaccess 文件 URL 重写参数
问题描述
我有一个包含大约 100 个页面的网站,其中示例 .htaccess 文件具有
RewriteRule ^1/?$ page1.php [NC,L]
RewriteRule ^2/?$ page2.php [NC,L]
RewriteRule ^3/?$ page3.php [NC,L]
问题是这些页面在彼此之间以及在添加时会发生大量重定向
header("location: page1.php");
有效,我希望使用 MySQL 填充它。
我可以改为硬编码
header("location: /1");
但如果 .htaccess 文件中的条目之一发生更改,我必须在很多地方进行更改。
所以我的问题是这可以由 MySQL 控制吗,就像我有一个简单的表
(id,page) values (1,page1.php)
并且 .htaccess 会根据这个 MySQL 表进行填充。
如果可能的话,实现这一目标的最佳方法是什么。
谢谢。
解决方案
您应该使用RewriteMap。
它使用 .htaccess 中提到的文本文件,可用于将 RewriteRule 中的“某物”映射到“某物”。
像这样的东西:
RewriteMap p2f txt:/path/to/map.txt
RewriteRule ^([^/]+)/?$ /{p2f:$1|notfound.php} [L]
map.txt 将是:
1 page1.php
2 page2.php
...
Apache 监视文件更改并自动重新加载它。
您将需要更改您的流程,以便在数据库中更新某些内容时,更新文本文件(可以使用 SELECT INTO OUTFILE)。
可以直接查询数据库,但是当我很久以前进行测试时,使用文件更快。
推荐阅读
- ansible - ansible action 插件扩展 ansible fact
- java - 无法删除 AWS s3 存储桶
- java - 在 weblogic 10.3.6 上部署 struts2.5 war 文件时无法加载 Action 类
- html - ul 选择器有效,但不适用于应用于 ul 的类
- c# - 从 mysql DB 检索数据时 C# wpf 应用程序关闭
- ios - 在 Obj-c 中使用 truncatingRemainder() 方法
- django - 在 ViewSet 上使用“as_view”方法检索视图时未传递动作装饰器 kwargs
- java - What is "primitive interface method" in Java?
- xml - 如何在 XSLT 中对节点及其以下兄弟节点进行排序?
- c# - 如何更改 wcf 客户端中的时间戳安全标头?