我正在尝试使用一个名为 WP Fast Cache 的 wordpress 插件,它可以根据您的所有帖子、页面和类别创建静态 html 文件。
它在 wp-content 内部创建以下目录结构:
wp_fast_cache
example.com
pagename
index.html
categoryname
postname
index.html
基本上只是一个嵌套的目录结构和每个项目的最终 index.html。
但是它所做的 htaccess 编辑是疯狂的。
#start_wp_fast_cache - do not remove this comment
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(GET)
RewriteCond /home/user/public_html/wp-content/wp_fast_cache/%{HTTP_HOST}%{REQUEST_URI}x__query__x%{QUERY_STRING}index.html -f
RewriteCond %{HTTP_USER_AGENT} !(iPhone|Windows\sCE|BlackBerry|NetFront|Opera\sMini|Palm\sOS|Blazer|Elaine|^WAP.*$|Plucker|AvantGo|Nokia)
RewriteCond %{HTTP_COOKIE} !(wordpress_logged_in) [NC]
RewriteRule ^(.*)$ /home/user/public_html/wp-content/wp_fast_cache/%{HTTP_HOST}%{REQUEST_URI}x__query__x%{QUERY_STRING}index.html [L]
RewriteCond %{REQUEST_METHOD} ^(GET)
RewriteCond %{QUERY_STRING} ^$
RewriteCond /home/user/public_html/wp-content/wp_fast_cache/%{HTTP_HOST}%{REQUEST_URI}index.html -f
RewriteCond %{HTTP_USER_AGENT} !(iPhone|Windows\sCE|BlackBerry|NetFront|Opera\sMini|Palm\sOS|Blazer|Elaine|^WAP.*$|Plucker|AvantGo|Nokia)
RewriteCond %{HTTP_COOKIE} !(wordpress_logged_in) [NC]
RewriteRule ^(.*)$ /home/user/public_html/wp-content/wp_fast_cache/%{HTTP_HOST}%{REQUEST_URI}index.html [L]
</IfModule>
#end_wp_fast_cache
无论我如何尝试解决这个问题,我都会得到 404 未找到。而且不是 Wordpress 404,而是 janky apache 404。
我需要找到正确的语法来路由所有不存在的请求,即文件或目录到:
wp-content/wp_fast_cache/hostname/request_uri/
例如:
页:
example.com/about-us/ => wp-content/wp_page_cache/example.com/about-us/index.html
邮政:
example.com/my-category/my-awesome-post/ => wp-content/wp_fast_cache/example.com/my-category/my-awesome-post/index.html
类别:
example.com/news/ => wp-content/wp_fast_cache/example.com/news/index.html
任何帮助都将受到赞赏。
- 编辑 -
经过大量的阅读和搜索后,似乎这就是我正在寻找的机器人:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) wp-content/wp_fast_cache/example.com/$1 [L]
</IfModule>
但不幸的是...它似乎不起作用,我做错了什么?
- 编辑 -
好的,如果已经创建了缓存页面,它可以正常工作,但是在尝试获取原始页面以缓存它们时会失败。
如果我在 htaccess 中没有任何内容并构建了所有缓存页面,然后添加 htaccess,它将正确路由,但这不允许我在向博客添加帖子或页面时构建新页面。
由于页面是动态的,我发布的代码将尝试在缓存中查找页面,由于未找到,它会创建一个新的缓存页面,这是请求的结果,即:我所有的新页面都是 404 页面:P
所以我需要找到一种方法来测试缓存页面,如果找不到,就路由到动态页面,这样就完美了。
答案1
看起来您的第一个 RewriteRule 需要在“index.html”之前加上“/”。
查看错误日志的内容会很有帮助 - 它会告诉您哪个最终 URI 实际上导致了 404,进而可能会告诉您重写规则出了什么问题。
此外,启用 RewriteLog 会告诉我们确切地发生了什么,这样我们就不用猜测了。它会告诉你哪些模式与哪些 URI 进行了比较,以及结果是什么。