重写到Wordpress基础之外的URL

时间:2012-06-18 19:55:36

标签: wordpress .htaccess mod-rewrite permalinks

我的wordpress博客安装在domain.com/blog,我有一个子页面,其结构看起来像domain.com/blog/pagedomain.com/blog/page/subpage

我希望我的访问者能够转到domain.com/subpage并查看domain.com/blog/page/subpage的内容,而不会在外部重定向到该网址,从而避免wordpress永久链接重写。

我尝试使用RewriteRule ^subpage$ /page/subpage [L]并且内容正在投放,但网址看起来像domain.com/blog/page/subpage(我猜Wordpress永久链接正在使用它。)

htaccess的:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]

// tried inserting my code here.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

# END WordPress

编辑:

这些日志显示页面访问活动 -

ip - - [19/Jun/2012:14:03:53 -0400] "GET /subpage/ HTTP/1.1" 301 - "http://domain.com/referrer/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1"
ip - - [19/Jun/2012:14:03:53 -0400] "GET /blog/page/subpage/ HTTP/1.1" 200 20022 "http://domain.com/referrer/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1"

此外,这是我的根.htaccess -

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^subpage/?$ /blog/page/subpage/ [QSA,L] 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

RewriteCond %{HTTP_HOST} ^domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.domain.com$

1 个答案:

答案 0 :(得分:3)

在使用Wordpress时,在htaccess中添加一些规则总是很棘手。相反,您应该使用其重写API。

首先,将此代码放在/wp-content/themes/CURRENT_THEME_ACTIVATED/functions.php的末尾:

function my_custom_page_rewrite_rule()
{
    add_rewrite_rule('^subpage/?', 'index.php?pagename=page/subpage', 'top');
}
add_filter('init', 'my_custom_page_rewrite_rule');

备注:您需要在pagename参数中指定网页级别,否则网址会发生变化。

然后,您需要告诉Wordpress它必须考虑您的新规则。为此,请转到管理面板:Settings&gt; Permalinks&gt;点击Save按钮。现在,您应该可以转到domain.com/blog/subpage并查看domain.com/blog/page/subpage的内容(网址不再更改)。

最后,如果您希望domain.com/subpage可以访问,则需要在根文件夹中添加htaccess并将此代码放入其中:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ blog/$1 [L]

而且......就是这样。你可以去domain.com/subpage,现在你可以得到你想要的东西。