我们正在从我们的网站中删除两个部分。
/仓库//服装/
我想将这两个 URL 下的所有 URL 发送到一个 (404) 登录页面,说明该项目已被删除。如果可能的话,我也想清理查询字符串。
我从哪里开始?
如果你使用的是nginx,你可以添加一对location
部分。只要没有更具体的位置,它们就会匹配。有关更多详细信息,请查看文档。
location /warehouse/ {
return 410;
}
location /clothing/ {
return 410;
}
如果位置太多,单独列出它们可能会很麻烦,因此您可以使用如下所示的正则表达式:
location ~* ^/(warehouse|clothing|something-else)/ {
return 410;
}
如果您想要自定义的 410 页面,请在server
块中添加如下配置:
error_page 410 /410.html;
location = /410.html {
root /var/www/error/; # Put a file /var/www/error/410.html
internal;
}
如果要返回该状态代码,请将 410 替换为 404。我相信410"消失"是更合适的答案,但是YMMV。
我建议在离客户端更近的地方这样做,所以如果nginx在Apache前面 - 用nginx做。这样,您的往返次数就会减少。
如果你想在 Apache 中做到这一点,你可以使用RedirectMatch
// I'm not sure `.*$` part is even necessary. Can be probably omitted.
RedirectMatch gone "^/(warehouse|clothing)/.*$" "/410.html"
或者我建议使用 mod_rewrite 作为更灵活的选择:
RewriteEngine on
RewriteRule ^/(warehouse|clothing)/ - [G,L]
ErrorDocument 410 /410.html
这里的[G]
表示"消失"(410状态代码)。如果需要 404 响应,请改为执行以下操作:
RewriteEngine on
RewriteRule ^/(warehouse|clothing)/ - [R=404,L]
请注意,您需要在正则表达式中^/
以指示路径不仅包含/warehouse/
或/clothing/
,而且以这些开头。否则,您将在诸如/about/clothing/
之类的地址上看到可疑的错误响应。我不确定你是否需要尾随.*$
,但我相信你不需要。不要让 Apache 来测试这一点。如果规则不适合您,请添加它(即^/(warehouse|clothing)/.*$
)。
或者,您可以在应用程序中处理逻辑 - 如果您的基本布局包含依赖于用户的内容并且您希望一致性,这可能是唯一的方法。在不知道您使用什么语言/框架/堆栈的情况下,无法编写答案。
首先,我建议您重定向到 410(消失)而不是 404,以确认该资源曾经存在过。
在 Apache 中,您将执行以下操作。有关详细信息,请参阅此页面。
RedirectMatch permanent "^/(warehouse|clothing)/?.*" "http://www.example.com/404"
在 IIS 中,Web 配置将如下所示。请注意,IIS 不允许您在正则表达式中使用问号,因为它将其解释为查询字符串。有关详细信息,请参阅此页面。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="404 Redirect" stopProcessing="true">
<match url="^/(warehouse|clothing)/" />
<action type="Redirect" url="404" appendQueryString="true" redirectType="Permanent" />
<conditions trackAllCaptures="true"></conditions>
</rule>
</rules>
</rewrite>
<httpProtocol allowKeepAlive="false" />
<caching enabled="false" />
<urlCompression doDynamicCompression="true" />
</system.webServer>
</configuration>
根据 drdaeman 的评论更新为包含正则表达式开头的^/
。