在htaccess中查询重写的Wordpress URI

时间:2014-04-26 12:31:17

标签: wordpress .htaccess rewrite

我想在现有的Wordpress Rewrite块中添加重写规则。我有一个特殊的页面,需要动态参数,但SEO友好的网址。

所以

http://unitedathletes.ch/athleten/var_sportart/var_name

应该成为

http://unitedathletes.ch/athleten/?sportart=var_sportart&name=var_name

http://unitedathletes.ch/athleten/

是一个现有页面,其中包含处理查询参数所必需的逻辑。

现有的wordpress htaccess重写块如下所示:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>

在该块中的哪个位置以及如何添加所希望的规则?我尝试了很多东西,但不能自己解决。

更新1

尝试add_rewrite_rule(),无法使其工作:在functions.php中:

add_action( 'init', 'add_rewrite' );
function add_rewrite(){
    add_rewrite_rule('^athleten/([^/]*)/([^/]*)/?','index.php?page_id=340&sportart=$matches[1]&athlet=$matches[2]','top');
    add_rewrite_tag('%sportart%','([^&]+)');
    add_rewrite_tag('%athlet%','([^&]+)');
}

更新2

只需要刷新重写规则。感谢您的帮助。

flush_rewrite_rules();

3 个答案:

答案 0 :(得分:1)

描述中的标记与示例代码中的标记完全不匹配。它是术语和语言的混合体。也许这就是所有必须修复的,所以这是一个尝试。但除非你指定更多细节以及你的实际问题是什么,否则我们无能为力......

RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^members/([^/]+)/([^/]+)$ /members/?sporttype=$1&name=$2 [L,NC,QSA]

再一次,这只是一个粗略的猜测,因为你的问题中缺少重要的细节。

当人们使用.htaccess样式文件时,我总是会附上一般说明:如果您有权访问服务器配置,那么请始终将这些规则放在主机配置中。 .htaccess样式文件非常容易出错,它们使事情变得复杂,难以调试并且确实使服务器速度变慢。使用此类文件的唯一原因是,如果您必须修改动态基础上的规则,或者您无法访问/无法控制服务器配置。

答案 1 :(得分:1)

更改

RewriteRule ^athleten/([^/]*)/([^/]*)$ /?page_id=295&sportart=$1&athlet=$2 [L,NC]

RewriteRule ^members/([^/]*)/([^/]*)$ /members/?&sporttype=$1&name=$2 [L,NC]

应该有用。

您希望最终结果为domain.com/members/?sporttype=sporttype&name=name_familyname,但您将athleten/sporttype/name_familyname转为/?page_id=295&sportart=$1&athlet=$2

答案 2 :(得分:0)

将此添加到functions.php

add_action( 'init', 'add_rewrite' );
function add_rewrite(){
    add_rewrite_rule('^athleten/([^/]*)/([^/]*)/?','index.php?page_id=340&sportart=$matches[1]&athlet=$matches[2]','top');
    add_rewrite_tag('%sportart%','([^&]+)');
    add_rewrite_tag('%athlet%','([^&]+)');
    flush_rewrite_rules();
}

无需涉及.htaccess