为WordPress添加额外的Rewrite规则

2008年7月24日 | 分类: 编程开发 | 标签: ,

  WrodPress默认的Rewrite规则保存在BLOG目录下的.htaccess,内容如下:

# BEGIN WordPress
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</ifmodule>
# END WordPress

  当我们要添加一条额外的Rewrite规则的时候,例如我们要添加一条:“RewriteRule ^blog(.*)$ $1 [R=301,L]”,可能就直接添加在WordPress自带规则:“RewriteBase /”之下,变成:

# BEGIN WordPress
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^blog(.*)$ $1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</ifmodule>
# END WordPress

  可是在后台重新设置WordPress的永久链接,并提交保存之后,就会将.htaccess文件恢复为默认状态,之前所做的努力都付之东流了。

  正确的做法是不去改动.htaccess文件中“# BEGIN WordPress”与“# END WordPress”段中的内容,并模仿WordPress段的内容,自己增加一个额外段落,这样当WordPress更新.htaccess文件的时候,只会去更新他自己的段落,而不会影响到我们增加额外的段落。

  使用正确的方法添加额外的Rewrite规则后的.htaccess文件内容如下:

# BEGIN Custom
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^blog(.*)$ $1 [R=301,L]
</IfModule>
#END Custom
 
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress