WordPress + mod_rewrite

时间:2009-04-06 21:17:46

标签: php wordpress mod-rewrite

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

到目前为止,我已将Wordpress配置为显示正确的URL(domain.com/blog/page/2而不是domain.com/page/2),我还得到它以显示特定的博客页面通过网址参数发布帖子(domain.com/blog?page=N)。所以基本上我差不多完成了,我只需要将domain.com/blog/page/N映射到domain.com/blog?page=N。如果它只是一个普通的旧静态站点,这将是一个简单的任务,但Wordpress有自己的URL处理,我相信可能会干扰它 - 更不用说“博客”不是一个实际的URL所以它需要通过规则两次,一次用于映射博客分页,再次让Wordpress可以像往常一样处理生成的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 个答案:

答案 0 :(得分:1)

尝试以下

<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>

答案 1 :(得分:1)

我最终弄明白了(几天后 - 我直到现在才忘记这一点)。首先,确保您已更新Wordpress。当时我使用的是2.5或2.6,但由于某种原因,在我更新之前它不起作用。

首先,创建一个自定义模板。您将在主页上使用此模板,以便自定义它和所有爵士乐。单独保留“主索引”(index.php)模板 - 该模板将用于博客索引页面,因此需要WP循环来列出您的博客帖子。

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

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

那应该是它。我事先尝试过这个但是没有用,所以我尝试使用重定向规则,但无济于事。我最终是一个过时的WP安装。如果您安装了站点地图模块,请确保排除“主页”页面,以便蜘蛛不会在example.com/home中获取主页的副本。您也可以将它放在robots.txt中以确定。

完成后,您所在域的root(example.com/)(假设您安装了WP)将指向您的“主页”页面。您的博客页面(example.com/blog)将列出您的帖子。分页将按预期工作(example.com/blog/page/2 etc.)。

答案 2 :(得分:0)

或尝试

<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停止规则处理。

相关问题