htaccess重写没有常见模式的网址

and*_*rew 7 .htaccess rewrite

在一个新项目中,一个网站有一组静态html页面.所有者需要将它们转换为动态的.每个页面都有:文本部分,小照片以及与此相关的其他页面的链接.

所有这些我都可以放入数据库并创建一个动态页面(php).

我的问题是每个静态页面都是唯一的 - 在url中没有常见的模式.目前有860个这样的页面.我可以有一个网址:

folder1/folder2/item1.htm
folder1/folder2/folder3/item2.htm
folder1/folder2/folder2-fodler3/item3.htm
Run Code Online (Sandbox Code Playgroud)

这三种是迄今为止最常见的模式(在860中提供约650个网址).

每个文件夹名称实际上是一个类别/子类别/关键字,我可以用来确定我的项目的属性.作为一般规则,前2个文件夹(folder1和folder2)是产品的类别和子类别,而下一个文件夹(文件夹3和之后)确定项目的部分(如果有).我希望这是有道理的.

所以,一个想法是使用旧的静态url作为数据库字段并匹配它来提供内容,例如:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /script.php?path=$1 [L]
Run Code Online (Sandbox Code Playgroud)

我认为将此规则置于重写规则的最后将确保所有其他重写不受影响.

这种方法是否可取?或者还有另一种方式吗?更强大/安全/轻便的东西?

hak*_*kre 2

您描述的方法非常常见并且效果很好:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /script.php?path=$1 [L]
Run Code Online (Sandbox Code Playgroud)

你可以通过直接解析PHP脚本中的原始请求字符串来减轻它,这样更直接。查看您的服务器在$_SERVERPHP 超全局数组中提供的内容,例如 run var_dump($_SERVER);$_GET['path']您已经找到了与您正在使用的类似的东西,这通常更具互操作性:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /script.php [L]
Run Code Online (Sandbox Code Playgroud)

接下来,根据 apache 服务器版本,可以进一步简化为:

FallbackResource /script.php
Run Code Online (Sandbox Code Playgroud)

RewriteCond这使您无需对当前使用的文件进行额外的文件检查。