如何通过htaccess重定向到带有POST ID的WordPress固定链接?

时间:2019-07-10 作者:nathanbweb

几年前,我看到易腐出版社的杰夫·斯塔尔(JeffStarr)为他的一本书建立了短链接,其中包括example.com/u/123 已重定向到example.com?p=123. 我认为这是一种使用WordPress帖子id建立无障碍短链接的便捷方法。

我找不到返回的代码段,而且我不擅长htaccess。这里有一个我正在尝试的相关片段,但它返回404。这是否在正确的轨道上,您将如何修复它?

RewriteEngine On
RewriteRule ^go/(\\d+)$ /?p=$1 [R=302,L]

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

所以我不知道为什么RewriteRule 为您返回了404错误,因为我已经对其进行了测试,它确实按预期工作-如果实际启用了永久链接,您将被重定向到实际的post-permalink。

这是我的.htaccess 文件:

RewriteEngine On
RewriteRule ^go/(\\d+)$ /?p=$1 [R=302,L]

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

# END WordPress
也就是说,我将自定义重写规则置于WordPress重写规则之上。这样,即使WordPress永久链接被更新,您的自定义规则也会工作并保持不变。

尽管如此,您也可以使用parse_request 要获得相同的结果(即重定向),请执行以下操作:

add_action( \'parse_request\', function( $wp ){
    if ( preg_match( \'#^go/(\\d+)$#\', $wp->request, $matches ) ) {
        if ( $matches[1] && get_post( $matches[1] ) ) {
            wp_redirect( get_permalink( $matches[1] ) );
            exit;
        }
    }
}, 0 );