HTAccess重定向和WordPress

时间:2017-01-07 作者:user3277069

我正在从一个古老的静态网站迁移到Wordpress。

在旧站点中,我使用htaccess和RewriteRule简化URL并屏蔽底层参数。其中一例为:

RewriteRule ^definition/([^/]+) /display-definition?word=$1 [NC]
这允许用户指定以下URL:

domain.com/definition/love
在执行的工作表下:

domain.com/display-definition?word=love
我已经创建并测试了新的Wordpress页面,并手动将参数传递给它,效果很好。htaccess重定向不会这样做,而是将访问者抛到默认的Wordpress 404页面。

我曾尝试将RewriteRule放置在htaccess中的不同位置,但结果没有什么不同。

当前尝试的htaccess文件是:

RewriteEngine on
RewriteRule ^definition/([^/]+) /display-definition?word=$1 [NC]
RewriteRule ^murphyism/([^/]+) /display-murphy?id=$1 [NC]

# 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

2 个回复
SO网友:CompuSolver

标准WordPress。如果您在设置/永久链接页面中选择一个“pretty permalinks”,如“posts”选项,htaccess文件将为您完成此操作。

    # 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
我似乎无法将其正确格式化,因此请检查此处的源页面-https://codex.wordpress.org/htaccess

有关更多信息,请参阅Codex页-https://codex.wordpress.org/Using_Permalinks#mod_rewrite:_.22Pretty_Permalinks.22

SO网友:Tunji

您不应该在使用wordpress的htaccess中执行此操作。相反,您应该使用添加重写规则add_rewrite_rule 然后注册查询变量。

您将考虑添加重写规则来处理两次重写:

RewriteRule ^definition/([^/]+) /display-definition?word=$1 [NC]
RewriteRule ^murphyism/([^/]+) /display-murphy?id=$1 [NC]

For Definition:

add_action( \'init\', \'wpse251676_definition_rewrite_rule\' );
function wpse251676_definition_rewrite_rule(){
    add_rewrite_rule(
        \'definition/([a-z0-9A-Z_-]+)/?$\',
        \'index.php?pagename=display-definition&definition_word=$matches[1]\',
        \'top\'
    );
}

For Murphyism:

add_action( \'init\', \'wpse251676_murphyism_rewrite_rule\' );
function wpse251676_murphyism_rewrite_rule(){
    add_rewrite_rule(
        \'murphyism/([a-z0-9A-Z_-]+)/?$\',
        \'index.php?pagename=display-murphy&murphy_id=$matches[1]\',
        \'top\'
    );
}

You can then register the query vars with:

add_filter( \'query_vars\', \'wpse251676_query_vars\' );
function wpse251676_query_vars( $query_vars ) {
    $query_vars[] = \'definition_word\';
    $query_vars[] = \'murphy_id\';
    return $query_vars;
}
这样,您就可以使用内置get_query_var 在模板文件中或任何需要获取变量的地方,而不是使用$_GET[\'variable\']

$word = get_query_var(\'definition_word\'); //$_GET[\'definition_word\']
$id   = get_query_var(\'murphy_id\');       //$_GET[\'murphy_id\']
NOTE: 最好的做法是在变量前面加上前缀,使其具有不同于任何正式定义或未来定义的唯一名称

References:

相关推荐

Redirect undesirable domain

我有一个wordpress网站,我想运行两个不同域的主机。站点位于域example1的第一个主机中。com工作正常,但在第二个主机域示例2中。com重定向到示例1。com域。中没有设置重定向。htaccess文件。两个域中每个域的DNS都已正确设置。我的问题是我应该如何获得它这是重定向程序代码的哪一部分?