如何使用 htaccess 为缓存提供服务。html

How to use htaccess to serve cache .html

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/cache/-.html -f
RewriteRule ^(.*) /cache/-.html
RewriteRule !((.txt)|(.xml)|(.json)|(.html)|(.js)|(.mp4)|images|uploads\/(.*)|cache\/(.*)|resources\/(.*)|control\/(.*)|fonts\/(.*)|offline\/(.*)|stylesheets\/(.*)|libs\/(.*)|javascripts\/(.*))$ index.php [NC]

这是我的 htaccess 文件。 它应该为我的 /cache 文件夹的缓存文件提供服务。

我面临的问题是: 我有一个 url 像 site.com.br/blog/example-post/ 但我将此缓存保存为 blog-example-post.html

另外,如果没有找到缓存文件,则打开index.php控制所有请求。 但是,使用缓存我会减少我的服务器和数据库请求。

有人可以帮我 将所有/从请求替换为 - 在 htaccess 中吗?

编辑:site.com.br/blog/my-post/amp/ 的可能解决方案(另存为:blog-my-post-amp.html

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/cache/-.html -f
RewriteRule ^([^/]+)/([^/]+)/$ /cache/-.html [NC,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /cache/--.html [L]

更新:它现在对我有用

RewriteCond %{DOCUMENT_ROOT}/cache/.html -f
RewriteRule ^([^/]+)/$ /cache/.html [L]

RewriteCond %{DOCUMENT_ROOT}/cache/-.html -f
RewriteRule ^([^/]+)/([^/]+)/$ /cache/-.html [L]

RewriteCond %{DOCUMENT_ROOT}/cache/--.html -f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /cache/--.html [L]

RewriteCond %{DOCUMENT_ROOT}/cache/---.html -f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ /cache/---.html [L]

RewriteCond %{DOCUMENT_ROOT}/cache/.xml -f
RewriteRule ^([^/]+)/$ /cache/.xml [L]

RewriteCond %{DOCUMENT_ROOT}/cache/-.xml -f
RewriteRule ^([^/]+)/([^/]+)/$ /cache/-.xml [L]

RewriteCond %{DOCUMENT_ROOT}/cache/--.xml -f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /cache/--.xml [L]

RewriteCond %{DOCUMENT_ROOT}/cache/---.xml -f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ /cache/---.xml [L]

我必须修复一些东西,也许还要优化代码。当它达到100%时我会在这里更新

RewriteCond %{DOCUMENT_ROOT}/cache/-.html -f
RewriteRule ^(.*) /cache/-.html

这里明显的问题是你有两个反向引用但只有一个捕获子模式。 </code> 因此总是空的。如果您期待 <code>/blog/example-post/ 形式的请求,它应该映射到缓存文件 /cache/blog-example-post.html,那么规则应该更像这样:

 :
 RewriteRule ^([^/]+)/([^/]+)/$ /cache/-.html [L]

不要忘记 L 标志。


更新:

Edit: a possible solution for example.com/blog/my-post/amp/ (saved as: blog-my-post-amp.html)

RewriteCond %{DOCUMENT_ROOT}/cache/-.html -f
RewriteRule ^([^/]+)/([^/]+)/$ /cache/-.html [NC,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /cache/--.html [L]

RewriteCond条件)只适用于后面的第一个RewriteRule指令(它们一起形成一个规则)。所以,第二个RewriteRule无条件重写请求,不管缓存文件是否存在

您需要重复条件。例如:

RewriteCond %{DOCUMENT_ROOT}/cache/-.html -f
RewriteRule ^([^/]+)/([^/]+)/$ /cache/-.html [L]

RewriteCond %{DOCUMENT_ROOT}/cache/--.html -f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /cache/--.html [L]

旁白: 第一条规则中的 NC (nocase) 标志是多余的,因为正则表达式 ^([^/]+)/([^/]+)/$ 自然是 case-insensitive 无论如何。