我想在现有的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>
在该块中的哪个位置以及如何添加所希望的规则?我尝试了很多东西,但不能自己解决。
尝试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%','([^&]+)');
}
只需要刷新重写规则。感谢您的帮助。
flush_rewrite_rules();
答案 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