更新
我找到了this post,它解释了RewriteRule
可以在.htaccess
中使用,但需要修改。
这是可行的,但它需要是RewriteEngine On
下的第二个规则
RewriteRule ^/?find-a-home/new-homes/greenbooth/?(.*)$ https://demo.com/new-homes [L]
这适用于以下URL
/find-a-home/new-homes/greenbooth/property-type/bower
但是,如何修改它以处理带有查询字符串的URL呢?
/find-a-home/new-homes/greenbooth-village/property-types?property_beds=&property_type_price=60000
我制定了htaccess规则
RewriteRule ^/?find-a-home/new-homes/greenbooth/?(.*)$ https://demo.com/new-homes [R=301,L]
我在这里测试过了https://htaccess.madewithlove.com?share=ebd5828d-9535-4ae9-b74a-1b70a19535a2
wwwhtaccess.madewithlove.com验证器说它工作。
但是,当我将demo.com
更新为我的实际url
并将其放在我的服务器上时,它不起作用?
我检查了服务器日志,发现此错误
2022-06-14 10:27:37.449888 [INFO] [515989] [T0] [HTAccess] [/home/wwwsite/public_html/.htaccess:7] Redirect URL [^/find-a-home/new-homes/greenbooth/(.*)] does not fall inside current context [/], ignore.
does not fall inside current context
是什么意思?是否有方法更新RewriteRule
,使其符合当前上下文?
我试图用一个规则来捕获多个页面。我有一堆这样的页面
https://demo.com/find-a-home/new-homes/greenbooth/property-types/gilson
https://demo.com/find-a-home/new-homes/greenbooth/property-types/holtham
https://demo.com/find-a-home/new-homes/greenbooth/property-types/howarth
我想捕获任何包含find-a-home/new-homes/greenbooth
的URL并重定向到https://demo.com/new-homes
据我所知,Redirect 301
不接受regex表达式--这就是为什么我使用RewriteRule。
有人能帮忙吗?.htaccess
文件。其余的规则起作用。
# Perch Runway
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/perch
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /perch/core/runway/start.php [L]
# doesn't work, doesn't error?
RewriteRule ^/?find-a-home/new-homes/greenbooth/?(.*)$ https://demo.com/new-homes [R=301,L]
Redirect 301 /index.htm /
Redirect 301 /portfolio.htm /find-a-home/new-homes
Redirect 301 /buyers.htm /
Redirect 301 /land.htm /
1条答案
按热度按时间qqrboqgw1#
这两个规则的顺序是错误的。对
/find-a-home/new-homes/greenbooth/<anything>
的请求(我假设它没有Map到物理文件)首先被重写为/perch/core/runway/start.php
。因此,第二个规则从不匹配,也不做任何事情。通常,外部重定向需要在内部重写之前进行。
这两个规则也可以通过几种方式简化。在 substitution 字符串中不使用反向引用,因此不需要捕获子模式(即
(.*)
)。检查URL是否以perch
开头的 condition 应该移到RewriteRule
pattern 中(不需要额外的 condition)。例如:
正则表达式
^find-a-home/new-homes/greenbooth
匹配所有以该字符串 * 开头 * 的URL(.htaccess
中没有斜杠前缀)。您应该先测试302(暂时)重新导向,以避免潜在的快取问题。
这取决于你的意思。上面的规则已经“处理带有查询字符串的URL”,因为它们将被重定向。上面的规则将重定向指定的URL。但是,查询字符串在重定向过程中默认被保留。如果你想从重定向响应中删除查询字符串,那么在重定向中包括
QSD
(放弃查询字符串)标志。例如: