将URL重写到WordPress基础外部

9
我的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],内容得到了服务,但URL看起来像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$

尝试在 RewriteBase /blog/ 之前插入您的代码。 - Jon Lin
相同的问题 - 内容已加载,但URL仍然为“/blog/page/subpage/”。 - Dave Kiss
纯属好奇,如果将您的规则正则表达式更改为:^subpage/$会发生什么? - Jon Lin
相同的结果 - Dave Kiss
1个回答

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');
< p >注意:您需要在pagename参数中指定页面级别,否则URL将会改变。

接下来,您需要告诉WordPress考虑您的新规则。为此,请进入您的管理面板:设置 > 固定链接 > 点击保存按钮。现在,您应该能够访问domain.com/blog/subpage并查看domain.com/blog/page/subpage的内容(URL不再改变)。

最后,如果您想要使domain.com/subpage可访问,您需要在根目录中添加一个htaccess文件,并将以下代码放入其中:

RewriteEngine On
RewriteBase /

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接