在新项目中,网站有一组静态html页面。所有者需要将它们转换为动态的。 每个页面都有:文本部分,小照片以及与此相关的其他页面的链接。
所有这些我可以放入数据库并创建一个动态页面(php)。
我的问题是每个静态页面都是唯一的 - 网址中没有常见的模式。目前有860个这样的页面。 我可以有一个网址:
folder1/folder2/item1.htm
folder1/folder2/folder3/item2.htm
folder1/folder2/folder2-fodler3/item3.htm
这3种是迄今为止最常见的模式(在860中提供约650个网址)。
每个文件夹名称实际上是一个类别/子类别/关键字,我可以用它来确定我的项目的属性。作为一般规则,前2个文件夹(folder1和folder2)是产品的类别和子类别,而下一个文件夹(文件夹3和之后)确定项目的部分(如果有)。 我希望这是有道理的。
所以,一个想法是使用旧的,静态的,url作为数据库字段并匹配它来提供内容,如:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /script.php?path=$1 [L]
我认为将此规则置于重写规则的最后将确保所有其他重写不受影响。
这种方法是否可取?或者还有另一种方式吗?更健壮/更安全/更轻松的东西?
答案 0 :(得分:2)
您描述的方法很常见且很好:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /script.php?path=$1 [L]
您可以通过直接在PHP脚本中解析原始请求字符串来减轻它,这更直接。查看服务器在$_SERVER
PHP超全局数组中提供的内容,例如:运行var_dump($_SERVER);
。您已经找到了与您正在使用的$_GET['path']
类似的内容,这通常更具有互操作性:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /script.php [L]
接下来,根据apache服务器版本,它可以进一步简化为:
FallbackResource /script.php
这使您无需在当前使用的RewriteCond
中进行额外的文件检查。
答案 1 :(得分:0)
只需使用
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/script.php?path=$1 [L]