1

我有一个缓存程序,可以创建动态生成的 php 文件的静态 html 文件。我目前使用 php 检查缓存版本是否存在,如果存在,我会提供它并退出 php。正如这个问题(http://stackoverflow.com/questions/5612735/using-mod-rewrite-to-view-cached-version-from-usual-url),我觉得这是浪费时间。但是,我有大约 5,000 个页面,因此,我不希望将它们全部放在同一个 /cache/ 目录中。相反,我想放置

/a-web-url/ in /cache/a/a-web-url.html.gz

/this-is-another-url/ in /cache/t/this-is-another-url.html.gz

我目前正在与

RewriteRule ^([A-Za-z0-9-_/\.]+)/$ /cache/$1

但是,这假设所有内容都在同一个目录中。我希望将它们分成子目录。谢谢。

另请注意,我的所有文件都以 .html.gz 结尾

4

3 回答 3

2

使用规则

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/?cache/ [NC]
RewriteRule ^/?(.)(.*?)/?$ /cache/${lc:$1}/${lc:$1}${lc:$2}.html.gz [L]
于 2012-11-06T00:21:25.837 回答
0

像这样的东西应该工作:

RewriteRule ^([a-z])([A-Za-z0-9-_/\.]+)/$ /cache/$1/$1$2
于 2012-11-06T00:11:57.380 回答
0

您正在与当前模式匹配多个大写、小写、破折号和下划线。您可以修改它以使用相同的字符类仅匹配第一个字符,然后使用修饰符匹配其余字符,并使用第一个字符和其余字符的反向引用+重写。使用将阻止它匹配以 . 开头的 URL 。$1$2(!?cache/)/cache/

RewriteRule ^(!?cache/)([A-Za-z0-9-_/\.])([A-Za-z0-9-_/\.]+)/$ /cache/$1/$1$2 [L]

你可以在这里测试这个规则:http: //htaccess.madewithlove.be/

如果你想让第一个字符小写,你可以添加RewriteMap tolower int:tolower到你的<VirtualHost>配置中,然后${tolower:$1}用于第一个字符。

于 2012-11-06T00:14:10.457 回答