阻止WordPress重写一个模板的URL

时间:2017-03-01 作者:Routhinator

已经提出了这个问题的各种变体,但是场景与我的不匹配,尽管我付出了努力,但我仍然无法在我的用例中采用之前的工作解决方案的答案。

我有一个页面模板,其中内置了javascript应用程序。该应用程序使用URL中的最后一个参数作为ajax请求的参数,并运行该请求,然后为其生成结果。

由于SEO问题和客户端要求,我无法更改或改变此请求语法的工作方式,因此我必须在Wordpress中工作(页面是从Ruby应用程序转换而来的)

当客户请求:

https://www.wordpresssite.com/service/testing-tool/domain.com
我需要在以下位置使用模板生成的页面进行响应:

https://www.wordpresssite.com/service/results
这一部分我在中使用了以下重写规则.htaccess

RewriteRule ^service/testing-tool/([a-z0-9.]+)$ /index.php?pagename=service/results [NC,L]
重写工作正常,但WordPress会将浏览器中的URL更改为

https://www.wordpresssite.com/service/results
这会导致JS失败,因为缺少域参数,而且它也不符合前面提到的要求。

我认为在这里做了一些研究之后,问题是redirect\\u canonical()操作,所以我尝试从模板中删除它:

// Disable redirect_canonical()
add_action( \'init\', \'results_tweaks\' );
function results_tweaks()
{
    remove_action( \'template_redirect\', \'redirect_canonical\' );
}
然而,这似乎没有做到这一点。阅读WP文档,我怀疑这是因为在页面加载时操作已经被处理。

是否有其他方法可以专门针对此模板覆盖此操作,而无其他方法?也许除了删除操作之外还有其他方法?

2 个回复
最合适的回答,由SO网友:Milo 整理而成

您可以使用内部重写,而不是。htaccess:

function wpd_service_rewrite() {
    add_rewrite_rule(
        \'^service/testing-tool/([a-z0-9.]+)$\',
        \'index.php?pagename=service/results\',
        \'top\'
    );
}
add_action( \'init\', \'wpd_service_rewrite\' );
别忘了flush rewrite rules 添加/更改后。

SO网友:filipecsweb

只需将重写规则更改为:

RewriteRule ^service/testing-tool/([a-z0-9.]+)/?$ /index.php?pagename=service/results&domain=$1 [NC,L]

现在,从内部https://www.wordpresssite.com/service/results 您可以通过PHP获取域。

注意,我添加了“/?”按照你的规则,否则就行不通了。

使用php,您可以使用$_GET[\'domain\'].

希望这有帮助。

相关推荐