我想做的很简单,但不起作用,我不知道这是Wordpress重写还是我做错了。
我拥有的是以下url:
http://www.example.com/newsletter/?ut=token
我想要
.htaccess
按以下方式编写:
http://www.example.com/newsletter/confirm/token
同样的道理:
http://www.example.com/newsletter/?uc=token
应重写为:
http://www.example.com/newsletter/delete/token
这是我的真实
.htaccess
:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^newsletter/confirm/(.+)/?$ index.php?page_id=4058&ut=$1 [L,NC]
RewriteRule ^newsletter/delete/(.+)/?$ index.php?page_id=4058&del=$1 [L,NC]
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
4058是新闻稿页面的id。我也尝试过:
RewriteRule ^newsletter/confirm/(.+)/?$ newsletter/?ut=$1 [L,NC]
RewriteRule ^newsletter/delete/(.+)/?$ newsletter/?del=$1 [L,NC]
但它仍然不起作用。使用第一种方法,它转到没有查询字符串的新闻稿页面(因此它给出一个空页面);对于第二个,它给出404未找到。
我也尝试过使用Wordpress的内置功能add_rewrite_rule
没有成功,这就是我所尝试的:
function customRewriteRules(){
add_rewrite_rule(\'^newsletter/confirm/(.+)/?\', \'index.php?page_id=4058&ut=$matches[1]\', \'top\');
add_rewrite_rule(\'^newsletter/delete/(.+)/?\', \'index.php?page_id=4058&del=$matches[1]\', \'top\');
}
add_action(\'init\', \'customRewriteRules\');
这可能与Wordpress的基本重写条件的重写优先级有关吗?还是我只是做得不好?
最合适的回答,由SO网友:thomascharbit 整理而成
WordPress在PHP中有自己的重写系统,因此您可以通过两种方式进行重写
如果您想从htaccess重写这些url,我只会让它重写
http://www.example.com/newsletter/confirm/token
到http://www.example.com/newsletter/?ut=token
而不是试图重写http://www.example.com/newsletter/confirm/token
到http://www.example.com/index.php?page_id=4058&ut=token
并让WordPress处理页面id重写。
因此htaccess规则是:
RewriteRule ^newsletter/confirm/(.+)/?$ /newsletter/?ut=$1 [L,NC]
或者,您可以在WordPress重写系统中定义重写规则:
add_rewrite_rule(\'^newsletter/confirm/(.+)/?$\', \'index.php?page_id=4058&ut=$matches[1]\', \'top\');
无论如何,要访问这个新的查询变量,您还必须在WordPress中声明它:
add_filter(\'query_vars\',\'my_add_ut_query_var\');
function my_add_ut_query_var($vars) {
array_push($vars, \'designer\');
return $vars;
}
现在,您可以从页面模板访问它:
$token = get_query_var(\'ut\')
当然,在添加新规则时,不要忘记刷新规则:)
(也要小心,你的uc
或ut
参数)