如何使用 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 无论如何。
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 无论如何。