使用mod_rewrite或挂钩修改URL

时间:2012-01-24 作者:Philipp Kyeck

我正在努力实现以下目标:

用户在浏览器中输入此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?

2 个回复
最合适的回答,由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] 选项起作用。

SO网友:Frank Nocke

我也在类似的地盘上。请参见:flexible rewrite 'ramble' URLs with Wordpress不,[R]或301重定向无法让您达到目标。任何常规的htaccess重写都会带来麻烦,因为wp的某些部分仍然可以帮助自己访问原始的REQUEST\\u URI(或者PATH\\u INFO)。

您是否注意到,您可以重写$\\u服务器变量?(即使那叫黑客)

echo "server".$_SERVER[\'REQUEST_URI\']; //get\'s you: the original thing
$_SERVER[\'REQUEST_URI\'] = \'banana\';
echo "server".$_SERVER[\'REQUEST_URI\']; //gets you: banana
如果你发现了什么,请把它贴出来。

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴