首页 > 解决方案 > .htaccess rewriterule 不工作(wordpress)

问题描述

我在这里迫切需要一些帮助。关于这个问题,我已经把头发拉了一个多星期了。我知道它应该非常简单,但由于某种原因它不起作用......

我有一个搜索查询,出于美学和 seo 的原因,我想让它看起来很漂亮。我希望 /rentals 在内部重定向到(丑陋的)查询 /?ct_ct_status=for-rent&search-listings=true。在这里澄清一下,我希望访问者不要注意到当他们访问 /rentals 时,他们实际上被重定向到查询。

无论如何,我尝试了以下方法:

RewriteEngine On
RewriteBase /
RewriteRule ^rentals/?$ https://www.example.com/?ct_ct_status=for-rent&search-listings=true [L]

现在这里的 example.com 显然不是实际的 url。我已经尝试了上述方法以及它的许多细微变化,包括:只有查询而不是完整的 url;不同的旗帜;有和没有 RewriteEngine On;有和没有 RewriteBase;尝试不重定向到查询,而是重定向到常规页面;可能还有一些我忘记的其他事情。

现在还值得一提的是,这个网站是在 Wordpress 上运行的。上面的 rewriterule 放在 .htaccess 中 Wordpress 的部分上方,但这也不起作用。

如果您希望我提供更多信息,请告诉我!

谢谢您的帮助!

编辑: 回答@msg 问题:我应该在最初的问题中提到这一点。上面提到的 RewriteRule 会重定向到正确的页面。但是,它是外部重写。换句话说,当访问 /rentals 时,它会重定向到https://www.example.com/?ct_ct_status=for-rent&search-listings=true,但它会将重定向显示为 url,因此不会将 /rentals 显示为网址。目标是使其成为内部重写,以便当有人访问 /rentals 时,它实际上将 /rentals 显示为 url,而不是重定向。

我还尝试了 [R] 标志,Apache 的网站说这是用于内部重写的正确标志:link。但这仍然会导致外部重写。

查询不由 Wordpress 处理。处理主页的 PHP 文件检查是否存在搜索查询,如果存在,则显示处理搜索结果的 PHP 文件的输出。

回答@shane 问题:我对上述@msg 问题之一的回答也可能有助于回答您的问题。但进一步扩展,租金实际上不是自定义帖子类型。它是一种称为“列表”的自定义帖子类型的分类法。

function add_custom_rewrite_rule() {
    add_rewrite_rule('^rentals/?$', 'https://www.redcapper.com/?ct_ct_status=for-rent&search-listings=true', 'top');
}

add_action('init', 'add_custom_rewrite_rule', 10, 0);

我曾尝试使用上述方法连接到 Wordpress 的重写 API,但它不起作用......它给了我一个 404 错误......

标签: wordpress.htaccessmod-rewrite

解决方案


WordPress URL 的重写不应在 .htaccess 中完成 - WordPress 本身实现了它自己的重写引擎。

所有重写都应使用此 API 完成。请参阅add_rewrite_rule

编辑
试试这个...

function add_custom_rewrite_rule() {
    add_rewrite_rule('^rentals/?$', 'index.php?ct_ct_status=for-rent&search-listings=true', 'top');
}

add_action('init', 'add_custom_rewrite_rule', 10, 0);

推荐阅读