需要更正 htaccess 文件

需要更正 htaccess 文件

我正在尝试使用一个名为 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 进行了比较,以及结果是什么。

相关内容