清理WordPress中自定义页面的URL

时间:2019-01-08 作者:Mostafa Ahangarha

我有一个wordpress网站,其中有一个专门的字典页面。此页面实际上是一个自定义页面,可执行以下操作:

  • site.com/dictionary 列出所有单词site.com/dictionary/?w=word 显示了单词的定义。现在,我希望URL被清理,并变成这样:

    site.com/dictionary/word
    
    我把这些台词都写进去了.htaccess 但我知道404 错误:

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /dictionary/
        RewriteRule (.*) ?w=$1 [L]
    </IfModule>
    
    你能帮我做这个吗?

    更新时间:

    我在这里尝试了解决方案:https://stackoverflow.com/questions/27162489/ 但这对我来说也不管用。

2 个回复
最合适的回答,由SO网友:Milo 整理而成

您可以使用内部重写系统来实现这一点,该系统是用php解析的,而不是用htaccess。

首先,添加规则。这假设您已经在以下位置创建了根页面Pages 带着子弹dictionary.

function wpd_dictionary_rewrite(){
    add_rewrite_tag( \'%dictionary_word%\', \'([^/]+)\' );
    add_rewrite_rule(
        \'^dictionary/([^/]+)/?$\',
        \'index.php?pagename=dictionary&dictionary_word=$matches[1]\',
        \'top\'
    );
}
add_action( \'init\', \'wpd_dictionary_rewrite\' );
此代码将放在您的主题中functions.php 文件或您自己的插件。

访问Settings > Permalinks 添加此后刷新规则的页面。

现在您可以访问site.com/dictionary/word 所需单词将在模板中提供get_query_var(\'dictionary_word\').

如果代码依赖于$_GET[\'w\'] 您不能/不想更改此设置,可以在代码运行之前挂接并手动设置值:

function wpd_set_dictionary_word(){
    if( false !== get_query_var( \'dictionary_word\', false ) ){
        $_GET[\'w\'] = get_query_var( \'dictionary_word\' );
    }
}
add_action( \'wp\', \'wpd_set_dictionary_word\' );

SO网友:André Kelling

你不能只是重写URL。

使用其他URL路径时,需要重构大量代码/word 在URL参数上?w=word.

那是两双不同的鞋。。。

some more info:

在WordPress中使用PHP进行路由是一个复杂的主题,不容易用几句话来描述。即使是有经验的开发人员,您也可能不想遇到路由问题。

这里有一个关于PHP路由如何工作的简短示例:https://www.taniarascia.com/the-simplest-php-router/

相关推荐

Redirect htaccess

我需要帮助重定向我的页面。例如,我有网站https://example.com. 我需要将内容从https://example.com 到https://example.com/blog. 这不是问题,我通过更改主页URL来做到这一点。这很有效。但现在我需要添加来自旧的重定向https://example.com 到https://xmpl.com.我想用。htaccess,但这不起作用。你们能帮帮我吗?以下是我对此的一些尝试,但两者都不起作用。RewriteEngine On RewriteRu