重写到Wordpress基础之外的URL

Dav*_*iss 9 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而无需外部重定向到该URL,从而避免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
Run Code Online (Sandbox Code Playgroud)

编辑:

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

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"
Run Code Online (Sandbox Code Playgroud)

另外,这是我的根.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$
Run Code Online (Sandbox Code Playgroud)

Jus*_*man 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');
Run Code Online (Sandbox Code Playgroud)

备注:参数中需要指定页面级别pagename,否则url会发生变化。

然后,您需要告诉 WordPress 它必须考虑您的新规则。为此,请转到您的管理面板:Settings>>Permalinks单击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]
Run Code Online (Sandbox Code Playgroud)

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