【问题标题】:Rewrite to URL outside of Wordpress base重写为 Wordpress 基础之外的 URL
【发布时间】:2012-06-20 20:24:17
【问题描述】:

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

编辑:

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

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/ 之前插入您的代码
  • 同样的问题 - 内容加载,但 url 仍然是 /blog/page/subpage/
  • 出于好奇,如果您将规则的正则表达式更改为:^subpage/$?
  • 与提到的结果相同

标签: wordpress .htaccess mod-rewrite permalinks


【解决方案1】:

在您的 htaccess 中添加一些规则,同时使用 Wordpress,总是很棘手。相反,您应该使用它的重写 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参数中指定页面级别,否则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]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多