我正在努力实现以下目标:
用户在浏览器中输入此URL
http://mydomain.com/boston/categoryname/postname/
然后,我想获取第一个“文件夹”,并检查它是“boston”还是“newyork”-如果是,则删除URL的这一部分,将其添加为查询参数,并将修改后的URL传递给wordpress:
http://mydomain.com/categoryname/postname/?location=boston
我用apache的
mod_rewrite
像这样:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^(boston|newyork)/(.*)$ /$2?location=$1 [NC,QSA,L]
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
在我的
functions.php
我为添加筛选器
request
add_filter(\'request\', \'request_it\');
function request_it($query_vars)
{
print_r($query_vars);
}
它发出回声
Array (
[page] =>
[name] => postname
[category_name] => boston/categoryname
[location] => boston
)
因此,位置作为查询参数传递,但
REQUEST_URI
仍然是
/boston/categoryname/postname/
而不是
/categoryname/postname/
wordpress试图显示错误的内容。
我如何才能真正从URL中删除该位置
是mod_rewrite
不适合使用
是否有一个函数,可湿性粉剂会评估传递给它的URL,我可以在其中挂钩并查找我的location
?
最合适的回答,由SO网友:Philipp Kyeck 整理而成
我使用apache代理模块修复了它:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !location
RewriteRule ^(boston|newyork)/$ /index.php?location=$1 [NC,QSA,P]
RewriteCond %{QUERY_STRING} !location
RewriteRule ^(boston|newyork)/(.*)$ /$2?location=$1 [NC,QSA,P]
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
the
[P]
选项起作用。