【发布时间】:2017-09-23 18:09:58
【问题描述】:
我目前正在开发一个 WordPress 项目,并且有点卡在 .htaccess 重写规则上。
我的WordPress重写规则代码如下:
if (!function_exists('check_string_id_rule')){
function check_string_id_rule(){
add_rewrite_rule('id-check/([^/]+)','id-check/?id=$1','top');
}
add_action('init', 'check_string_id_rule');
免责声明:根据文档,我应该使用 $matches[1] 而不是 $1。我已经尝试过了,但是它只会将 id 的值设置为“matches[1]”。在一定程度上,$1 似乎可以解决问题。
当我导航到 mywebsite.com/id-check/12 时,一切正常,我的 id 值为 12。
然而,我的 ID 由许多字符组成,其中包含从 a-z 的字母、从 0-9 的数字以及偶尔的连字符“-”。
如果我导航到 mywebsite.com/id-check/12a-5,我会被重定向到一个空白页面。 WordPress 似乎将我重定向到一个不存在的页面。它试图将我重定向到 /12a-5 页面。转到 mywebsite.com/id-check/?id=12-a5 可以正常工作。
为什么我的规则没有得到执行?我检查了 .htaccess 文件,似乎没有任何竞争规则。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^id-check/([^/]+) /id-check/?id=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
这是 WordPress 的一些怪癖,还是我在这里遗漏了什么?
提前谢谢你,
Stijn van der Pol
【问题讨论】:
标签: php wordpress apache .htaccess mod-rewrite