我在wordpress尝试重写一个简单的url模式以满足我的需求时遇到了问题。
寻找:
How can I rewrite: localhost/projects/55/1 into index.php?page_id=X&proID=55&subID=1 without getting a 404?
到目前为止我尝试过:
直接修改 .htaccess :不起作用。然后我阅读了一些示例,并通过在 init-hook 上调用 wordpress 函数 add_rewrite_rule() 来尝试它。这是我当前的代码:
add_action('init', 'add_rewrite_rules');
function add_rewrite_rules() {
add_rewrite_rule('^projects/([^/]*)/?([^/]*)?/?','index.php?page_id=8&proID=$matches[1]&subID=$matches[2]','top');
}
有人可以帮助我吗?
编辑 1:参考
编辑2:
好的,更好。现在我不再得到404了。但可悲的是,它仍然不起作用(也许我做错了什么)。
echo '<pre>'; var_dump($_REQUEST); var_dump(get_query_var('proID')); var_dump(get_query_var('subID')); echo '</pre>';
结果:
array(0) {
}
string(0) ""
string(0) ""
有一个页面重新加载,因此它指向localhost/projects
。
萤火虫: URL: http://10.0.0.109:8888/projects/25/2 Status: 301 Moved Permanently Domain: 10.0.0.109:8888 Size: 3.1 KB RemoteIP: 10.0.0.109:8888
htaccess文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Custom rule
RewriteRule ^projects/([0-9]+)/?([0-9]+)?/?$ /index.php?page_id=8&proID=$1&subID=$2 [L,QSA]
RewriteRule ^index'.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
您可以再次尝试 htaccess 文件。您需要确保将此规则放在可能已经存在的wordpress规则之上:
RewriteRule ^projects/([0-9]+)/([0-9]+)/?$ /index.php?page_id=8&proID=$1&subID=$2 [L,QSA]
尝试使用以下代码。它可能会解决您的问题。我不确定。
add_action('init', 'add_rewrite_rules');
function add_rewrite_rules() {
add_rewrite_rule('^projects/([^/]*)/?([^/]*)?/?','index.php?page_id=8&proID=$matches[1]&subID=$matches[2]','top');
flush_rewrite_rules();
}