代码之家  ›  专栏  ›  技术社区  ›  Cristian Sanchez

wordpress+mod_重写

  •  0
  • Cristian Sanchez  · 技术社区  · 15 年前

    我使用WordPress作为CMS,其中首页大部分是静态的,而实际的博客部分已经被移动到一个新页面,该页面使用自定义页面模板,基本上就像是标准WordPress安装的首页一样。它工作得很好,但仍然有一些缺陷。主要的一点是分页将不再有效,WordPress将无法识别生成的页面URL。

    到目前为止,我已经将WordPress配置为显示正确的URL(domain.com/blog/page/2而不是domain.com/page/2),并且还让它通过URL参数(domain.com/blog)显示特定的博客文章页面。Page=n)。所以基本上我已经完成了,我只需要把domain.com/blog/page/n映射到domain.com/blog?page=n.如果它只是一个普通的静态站点,这将是一个简单的任务,但是WordPress有它自己的URL处理,我相信可能会干扰它-更不用说“blog”不是一个实际的URL,因此它需要通过两次规则,一次用于映射博客分页,一次用于处理生成的URL,因为它需要我经常…我想我可能需要使用n或ns标志来重写规则,但我不知道如何使用它们

    我想到的规则是:

    RewriteRule ^/blog/page/([0-9]+)$ /blog?page=$1
    

    默认wordpress.htaccess:

    RewriteEngine On  
    RewriteBase /  
    RewriteCond %{REQUEST_FILENAME} !-f  
    RewriteCond %{REQUEST_FILENAME} !-d  
    RewriteRule . /index.php [L]  
    

    根据一些建议,我已经为.htaccess获得了这个,但它仍然不识别它。

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule /blog/page/([0-9]+)$ /blog?page=$1 [N,QSA]
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    

    我敢肯定,通过url参数更改页面确实有效——我手动更改了url中的数字,它实际上更改了页面。Web服务器是LiteSpeed,如果这有什么区别的话

    3 回复  |  直到 15 年前
        1
  •  1
  •   Mez    15 年前

    尝试以下操作

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule /blog/page/([0-9]+)$ /blog?page=$1 [R=301]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
        2
  •  1
  •   Cristian Sanchez    15 年前

    我终于明白了(几天后——直到现在我才忘记这个)。首先,确保你更新了WordPress。当时我使用的是2.5或2.6版本,但由于某种原因,直到我更新后才生效。

    首先,创建自定义模板。你将使用这个模板为你的主页,所以定制它和所有爵士乐。不要使用“主索引”(index.php)模板——该模板将用于博客索引页,因此它需要wp循环来列出您的博客文章。

    现在,去创建两个页面。一个用于主页(我们称之为“主页”),另一个用于博客(我们称之为“博客”)。在“主页”页面上,将模板设置为先前创建的主页模板。在博客页面上,将其保留在默认模板上——默认情况下,它将使用“主索引”模板。

    现在,进入“阅读”设置并将其更改为“静态页面”。对于首页,请选择以前创建的“主页”。对于“文章”页面,选择您创建的“博客”页面。

    应该就是这样。事实上,我事先就尝试过这个方法,但没有成功,所以我尝试使用重定向规则,但没有效果。我最终成为一个过时的wp安装。如果安装了Sitemap mod,请确保排除“主页”页,这样蜘蛛就不会在example.com/home上截取主页的副本。你也可以把它放在robots.txt里。

    完成后,域的根(example.com/)将指向您的“主页”。您的博客页面(example.com/blog)将列出您的文章。分页将按预期工作(example.com/blog/page/2等)。

        3
  •  0
  •   Simeon Pilgrim    15 年前

    或尝试

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^blog/page/([0-9]+)$ /blog?page=$1 [NC,N]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [NC,L]
    </IfModule>
    

    NC使其不区分大小写,N使其重新应用规则,L停止规则处理。