WordpRess将所有子页面重定向到父页面

时间:2014-06-01 04:11:20

标签: php wordpress .htaccess

我正在使用WordPress中的页面设置,让我们说/clients

此页面分配了一个模板,用于输出外部数据库中的客户列表。

我想要做的是将每个客户端超链接到他们自己的个人资料页面,例如/clients/john-snow/

现在因为/clients/john-snow/不是在WordPress中设置的页面,所以它将转到404找不到。

是否有人知道我可以将/clients/*的所有变体重定向到引用我可以构建客户端配置文件的其他页面或脚本的方式?

我在考虑使用.htaccess将网址保持为/clients/john-snow/,但仍然指向/clients/

3 个答案:

答案 0 :(得分:0)

如何将WordPress .htaccess替换为:

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_URI} !^/(clients/.*)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress 

关键是这一行:

RewriteCond %{REQUEST_URI} !^/(clients/.*)$ [NC]

其中将排除包含clients的网址请求。

编辑:重新阅读您的问题,似乎您希望在clients/上拥有一个受WordPress控制的客户列表,但后来想要确保任何内容都是子目录,无论该页面是什么。所以我很确定这个解决方案对你不起作用。但也许您可以将客户端放在另一个子路径中,例如clients/content/,然后将此RewriteCond更改为:

RewriteCond %{REQUEST_URI} !^/(clients/content/.*)$ [NC]

这将允许您拥有此WordPress控制的URL:

http://my.great.site/clients/

但也有这个非WordPress网址

http://my.great.site/clients/content/john-snow/

所以这样,clients/仍由WordPress处理,但由于clients/content/被忽略,等等!

答案 1 :(得分:0)

你必须使用这个

# 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 :(得分:0)

您可以在某个特定网址中add a Rewrite Rule to parse query vars

add_action( 'init', 'rewrite_rule_so_23976696', 99 );

function rewrite_rule_so_23976696() {

    global $wp_rewrite;

    add_rewrite_rule( 'clients/([^/]+)/?$', 'index.php?pagename=clients&client_name=$matches[1]', 'top' );
    add_rewrite_tag( '%client_name%','([^&]+)' );

    if ( ! isset( $wp_rewrite->rules['^clients/(.+?)/?$'] ) )
        $wp_rewrite->flush_rules();

}

在您的模板文件中,有些内容。如果URL包含/clients/SOMETHING做一件事,否则做默认事情。

$name = get_query_var('client_name');
if( $name ) {
    // Queried URL
    echo 'Something: ' . urldecode($name);
}
else {
    // Root URL
    echo 'Nothing.';
}