我非常需要这里的帮助。关于这个问题,我已经抽出一个多星期了。我知道这应该是非常简单的,但是由于某种原因,它根本不起作用...
我有一个搜索查询,出于审美和搜索引擎优化的原因,我希望使其看起来很漂亮。我希望/ 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;有和没有RewriteBase;尝试不重定向到查询,而是重定向到常规页面;可能还有其他我忘记的事情。
现在还值得一提的是,该网站在Wordpress上运行。上面的重写器位于.htaccess中Wordpress'部分的上方,但这也不起作用。
如果您希望我提供更多信息,请告诉我!
谢谢您的帮助!
编辑: 回答@msg问题: 我应该在最初的问题中提到这一点。上面提到的RewriteRule确实重定向到正确的页面。但是,这是外部重写。换句话说,当访问/ rentals时,它会确实重定向到https://www.example.com/?ct_ct_status=for-rent&search-listings=true,但是它将重定向显示为url,因此不会将/ rentals显示为url。目标是使其内部重写,以便当有人访问/ 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错误...
答案 0 :(得分:0)
WordPress网址的重写不应在.htaccess中进行-WordPress本身实现了自己的重写引擎。
所有重写都应使用此API进行。参见add_rewrite_rule。
编辑
试试这个...
JLabel
答案 1 :(得分:-1)
对不起,但是您不能这样做(据我所知)。外部重定向正是这样:重定向。屏蔽仅适用于内部重定向。根据{{3}}:
如果指定了绝对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
而不是查询字符串one。在目标系统中,您已经有一个wordpress rewrite_rule
,因此应该可以使用。
这是您目前所拥有和所需之间的折衷。
您真正想做的是 proxy 一个请求,而mod_rewrite
本身无法做到。这并不像您想的那么简单,有许多安全方面的考虑,客户端可能不信任目标系统,或者涉及会话cookie或其他潜在的信息泄露。
但是,如果中间立场不可接受,则可以考虑使用documentation。支持使用mod_rewrite
和mod_proxy
代理请求,但是您具有先决条件。但这是我没有使用过的设置,无法提供更多帮助。
如果您可以修改代码,则可以考虑抓取目标页面,但这似乎工作量太大。
最后,您可以将目标页面嵌入到当前页面中。