gpt4 book ai didi

.htaccess - .htaccess 中有巨大的重定向列表有问题吗?

转载 作者:行者123 更新时间:2023-12-02 23:36:54 25 4
gpt4 key购买 nike

我想重定向每个帖子 301 重定向,但我有超过 3000 个帖子。

如果我列出

Redirect permanent /blog/2010/07/post.html http://new.blog.com/2010/07/23/post/
Redirect permanent /blog/2010/07/post1.html http://new.blog.com/2010/07/24/post1/
Redirect permanent /blog/2010/07/post2.html http://new.blog.com/2010/07/25/post2/
Redirect permanent /blog/2010/07/post3.html http://new.blog.com/2010/07/26/post3/
Redirect per......

对于 .htaccess 中超过 3000 个 url 重定向命令,这会占用我的服务器资源或导致一些问题吗?我不确定 .htaccess 是如何工作的,但如果服务器每次用户请求页面时都查看这些列表,我猜它会占用资源。

我无法使用 RedirectMatch,因为我在新网址中添加了日期变量。您对重定向这些帖子还有其他建议吗?还是我这样就很好?

谢谢!

最佳答案

我不是 Apache 专家,所以我无法判断 .htaccess 中的 3,000 个重定向是否是一个问题(尽管我的直觉告诉我这可能是一个坏主意)。但是,作为解决问题的更简单方法,为什么不使用 mod_rewrite进行重定向?

RewriteRule ^/blog/(.+)/(.+)/(.+).html$ http://new.blog.com/$1/$2/$3/ [R=permanent]

这使用正则表达式来匹配旧的 URL 并将其重写为新的 URL。 [R=permanent]指示 mod_rewrite 使用新 URL 发出 301,而不是在内部默默地重写请求。

在您的示例中,您似乎已将帖子发布日期添加到网址中,而旧网址中不存在该日期。由于您显然无法使用正则表达式来预测任意帖子的发布日期,因此此方法可能不适合您。如果您可以从网址中删除日期,那么您就可以开始了。

编辑:我第一次读到你的问题时,我错过了最后一段。 (“我无法使用 RedirectMatch,因为我在新 url 中添加了日期变量。”)在这种情况下,您可以使用 mod_rewrite 的 RewriteMap查找帖子的日期部分。

您有两个选择:

  1. 使用 HashMap 在静态文件中执行快速查找。这意味着您的所有旧网址都可以使用,但无法使用旧网址方案访问任何新帖子。
  2. 使用脚本捕获这一天。

在选项一中,创建一个名为 posts.txt 的文件并输入:

/yyyy/mm/pppp dd

...对于每个帖子,其中 yyyy 是帖子年份,mm 是月份,pppp 是帖子名称(不带 .html)。

完成后,运行:

$ httxt2dbm -i posts.txt -o posts.map 

然后我们添加到服务器/虚拟服务器配置:(请注意,路径是文件系统路径,而不是 URL。)

RewriteMap postday dbm:/path/to/file/posts.map
RewriteRule ^/blog/(.+)/(.+)/(.+).html$ http://new.blog.com/$1/$2/${postday:$1/$2/$3}/$3/ [R=permanent]

在选项二中,使用 pgm:/path/to/script/lookup.whatever作为你的 RewriteMap。请参阅mod_rewrite documentation有关使用脚本的更多信息。

在 mod_rewrite 中进行查找比仅仅重定向到查找日期然后重定向到最终目的地的脚本要好,因为 you should never redirect more than once 。发出 301 或 302 会产生往返成本,这会增加页面加载时间的延迟。

关于.htaccess - .htaccess 中有巨大的重定向列表有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3332224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com