Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess重写规则不工作(wordpress)_Wordpress_.htaccess_Mod Rewrite - Fatal编程技术网

.htaccess重写规则不工作(wordpress)

.htaccess重写规则不工作(wordpress),wordpress,.htaccess,mod-rewrite,Wordpress,.htaccess,Mod Rewrite,我在这里急需帮助。关于这个问题,我已经紧张了一个多星期了。我知道这应该是令人难以置信的直截了当,但出于某种原因,它就是不起作用 我有一个搜索查询,我想让它看起来漂亮的审美和搜索引擎优化的原因。我希望/rentals在内部重定向到丑陋的查询/?ct\u ct\u status=for rent&search listings=true。在这里,我只是想澄清一下,我希望访问者不要注意到,当他们访问/租赁时,他们实际上被重定向到查询 无论如何,我尝试了以下方法: RewriteEngine On Re

我在这里急需帮助。关于这个问题,我已经紧张了一个多星期了。我知道这应该是令人难以置信的直截了当,但出于某种原因,它就是不起作用

我有一个搜索查询,我想让它看起来漂亮的审美和搜索引擎优化的原因。我希望/rentals在内部重定向到丑陋的查询/?ct\u ct\u status=for rent&search listings=true。在这里,我只是想澄清一下,我希望访问者不要注意到,当他们访问/租赁时,他们实际上被重定向到查询

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

RewriteEngine On
RewriteBase /
RewriteRule ^rentals/?$ https://www.example.com/?ct_ct_status=for-rent&search-listings=true [L]
这里的example.com显然不是实际的url。我已经尝试了上面的方法和它的许多小的变化,包括:只有查询而不是完整的url;不同的旗帜;无论发动机是否开启;有无基础;尝试重定向到常规页面而不是查询;也许还有一些我忘记的事情

现在还值得一提的是,这个网站是在Wordpress上运行的。上面的重写规则位于.htaccess中Wordpress'部分的上方,但这也不起作用

如果你想让我提供更多信息,请让我知道

谢谢你的帮助

编辑: 要回答@msg问题: 我应该在最初的问题中提到这一点。上面提到的重写规则会重定向到正确的页面。然而,这是一个外部重写。换句话说,当访问/rentals时,它确实重定向到,但它将重定向显示为url,因此不将/rentals显示为url。目标是使其成为一个内部重写,这样当有人访问/租用时,它实际上将/rentals显示为url,而不是重定向

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

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

要回答@shane的问题: 我对上面@msg问题的回答可能也有助于回答您的问题。但进一步说,rentals实际上不是一种定制的帖子类型。它是一种称为“listings”的自定义帖子类型的分类法

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 URL的重写不应该在中完成。htaccess-WordPress本身实现了它自己的重写引擎

所有重写都应使用此API完成。看

编辑 试试这个

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);

对不起,据我所知你不能这么做。外部重定向就是:重定向。屏蔽仅适用于内部重定向。根据报告:

如果指定了绝对URL,mod_rewrite将检查 主机名与当前主机匹配。[...] 否则,将对给定URL执行外部重定向

因此,无论您是否指定[R]标志,如果目标域不同,它都会导致浏览器栏上的URL发生更改

您可以通过以下方式重定向到新域:

# [R] not necessary, being implied by the external redirect
RewriteRule ^(rentals)/?$ http://example.com/$1 [R,L]
这将导致重定向,但浏览器栏将显示http://example.com/rentals 而不是查询字符串1。在目标系统中,您已经有了wordpress重写规则,因此应该可以正常工作

这是你目前拥有的和你想要的之间的折衷

您真正想要做的是代理一个请求,而mod_rewrite本身无法做到这一点。这并不像您想象的那么简单,有许多安全方面的考虑,其中客户端可能不信任目标系统,或者涉及会话cookie或其他潜在的信息泄露

然而,如果中间立场是不可接受的,你可以研究一下。有对mod_rewrite和的代理请求的支持,但您有这个先决条件。但这是一个我没有使用过的设置,也帮不上什么忙

如果你可以修改代码,你可以考虑删除目标页面,但是看起来太麻烦了。


最后,您可以将目标页面嵌入到当前页面中。

这就是问题所在。有什么问题吗?什么都不做?url是否更改?404 ? 查询是由wordpress自己处理的吗?Marnix.hoh您能提供更多关于如何创建和搜索租赁的自定义帖子类型的信息吗?我会根据你的回答修改我的答案。非常感谢你的帮助!对我来说,这真的意味着整个世界@谢恩:我已经对我的问题做了编辑,我在其中回答了你的问题。再次请让我知道,如果您还有什么需要我提供更多信息的地方。@msg我也在我的编辑中为您的问题添加了答案。非常感谢你的帮助!!如果您想让我进一步介绍一些内容,请告诉我more@Marnix
.hoh我已经更新了我的答案-试一试,让我知道。非常感谢您快速而深入的回复@msg。但是,我没有重定向到另一个域。目标域是相同的。换句话说,有人会转到,并且应该被重定向到。所以域是相同的,因此内部重写应该是可能的no?@Marnix.hoh那么这不是一个mod_重写问题,看起来严格来说像wordpress问题,但是既然你说查询不是由wp处理的,我对你的设置有点迷茫。你的主页检查脚本在哪里?如果它确实是由wordpress处理的,您应该能够使用stock RewriteRule和add_rewrite_rule来完成,尝试将您的目标更改为'index.php?ct_ct_status=for rent&search listings=true',并在Settings>Permalinks>Save中刷新您的规则。不幸的是,这不起作用。。。它只是将我重定向到主页。有一个php文件可以“创建”主页。在php文件的顶部是代码检查“search listings”是否是set-GET变量。如果是,它将重定向到“搜索页面”。这有意义吗?如果你想让我详细说明,请告诉我。再次感谢您的帮助是的,谢谢。使用WordPress的默认重写规则,对不存在的文件的任何请求都会转到WordPress的index.php。所以/?ct\u ct。。。将被重定向到index.php?ct\u ct。。。但是你说主页脚本不是wordpress页面。你修改index.php了吗?这个“检查器”脚本做什么?主页使用一个“模板”,因此作为主页的Wordpress页面将模板“主页”分配给它。换句话说,主模板php文件在文件顶部有以下注释:/***模板名称:home*/同一文件中此注释的正下方是以下代码:if!空$_GET['search-listings']{GET_template_part'search-listings';return;}此选项检查是否存在搜索查询,或者更确切地说,它检查“search-listings”是否是查询中设置的GET变量之一。如果是这样,它将加载搜索结果页面谢谢您的建议。不幸的是,这也不起作用,它将我重定向到主页。请查看我对@msg的评论,它们可能有助于理解正在发生的事情,更重要的是,我的主页如何检测和处理搜索查询。你可以从我的评论中看到,搜索查询不是由wordpress直接处理的,因此我猜测wordpress无法识别它,因此默认为主页。请让我知道你的想法,我真的很感谢你的帮助谢谢!我想说你是对的。如果有,就换!空$\u GET['search-listings']到if GET\u query\u var'search-listings',并确保搜索列表模板也使用GET\u query\u var。您的确切含义是什么?同时让搜索列表模板使用GET\u query\u var?您的意思是每次使用$GET时,都应该用GET\u query\u var替换它吗?更改您的建议并使用add_rewrite_标记添加标记会将我重定向到Wordpress搜索结果查看页面。不管怎样,难道不可能只用.htaccess来重写吗?我的意思是,除了“丑陋”的查询显示在url栏中而不是/rentals中,它还可以工作。再次感谢你的帮助你好,马尼克斯,是的,这就是我的意思。如果使用$\u GET而不是GET\u query\u var,那么重写的GET参数将不起作用。有很多理由不在.htaccess中进行重写-例如,您可能有一个安全插件将覆盖您的重写规则。Wordpress内置了这个功能,现在需要做的就是更新你的模板,然后它就可以工作了——你现在就可以开始了!非常感谢您的回复。我将来可能会试试。问题是,准备数据库/wordpress查询时处理变量的方式非常复杂,不是我写的。。。所以我需要坐下来确保它不会影响代码的整体工作。我希望编辑.htaccess文件就可以了。但我想它不是。。。再次感谢您的帮助!