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

时间:2011-06-03 06:07:03

标签: .htaccess rewrite

在新项目中,网站有一组静态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]

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

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

2 个答案:

答案 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]