我有一个旧网址,需要将其重定向到新网站上的特定页面 - 这部分工作正常。该代码如下。
RewriteCond %{HTTP_HOST} ^oldurl.org$ [OR]
RewriteCond %{HTTP_HOST} ^www.oldurl.org$ [OR]
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.oldurl.com$
RewriteRule (.*)$ https://newurl.com/the/old/page/$1 [R=301,L]
问题是,有时我需要使用旧站点中的特定路径并将其指向新站点上的不同网址。
有没有办法在旧网址没有指定路径时重定向到特定页面,但当有路径时,保留它并将其添加到新网址?
so oldurl.com ==> newurl.com/the/old/page
但是 oldurl.com/anything-else ==> newurl.com/anything-else
让我们把我们在问题评论中得出的结论结合起来,这有助于理解您到底想要实现什么......
我假设您从同一服务器提供两个域(oldurl.com 和 newurl.com)(因为您添加了
RewriteCond
语句)。我冒昧地稍微简化了它们。
现有的
RewriteRule
在你的问题中有点缺失。它捕获所请求 URL 的路径并将其附加到目标 URL。根据您的评论,这不是您想要的。所以我就改了。
RewriteEngine on
# redirect https://oldurl.com/ to https://new-specific-url/the/old/page/
RewriteCond %{HTTP_HOST} ^(www\.)?oldurl\.org$ [OR]
RewriteCond %{HTTP_HOST} ^(www\.)?oldurl.com$
RewriteRule ^/?$ https://new-specific-url/the/old/page/ [R=301,L]
# redirect https://oldurl.com/<anything> to https://new-specific-url/<anything>
RewriteCond %{HTTP_HOST} ^(www\.)?oldurl\.org$ [OR]
RewriteCond %{HTTP_HOST} ^(www\.)?oldurl.com$
RewriteRule ^ https://newurl.com%{REQUEST_URI} [R=301,L]
正如我的第一条评论中所解释的,更具体的规则首先出现(因此在文件中更靠前)。将其视为一个例外。之后遵循一般后备规则。
我在第一条规则中使用
^/?$
作为匹配模式(而不是像 C3roe 在他的评论中建议的那样仅使用 ^$
)。这里的结果是一样的,但我个人更喜欢实现规则,以便可以使用它们而无需在中央配置或分布式配置文件中更改它们。如果有疑问,您应该始终选择中央配置,如果您有权访问该配置。否则,例如,如果您使用廉价的托管提供商,则可以使用分布式配置文件,如果该位置启用了该功能,尽管这有一些缺点。
请花时间实际了解实施情况。不要盲目复制。你想学。