gpt4 book ai didi

.htaccess 和 SEO URLs - 为什么这是一个无限循环?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:30:16 24 4
gpt4 key购买 nike

我有一个像这样的脏 URL:http://www.netairspace.com/photos/photo.php?photo=3392 .我想做类似 http://www.netairspace.com/photos/OH-LTU/Finnair_Airbus_330-202X/OUL_EFOU_Oulu/photo_3392/ 的事情(后来支持像 http://www.netairspace.com/pic/3392/ 这样的短 URL,但我会忽略它)。

所以我有一个脚本 photo_seo_url.php,它获取照片 ID,构建 SEO URL,并进行重定向(302 用于测试,301 是我满意的时候)。然后我计划添加 .htaccess mod_rewrite 规则,以便在调用旧 URL 时:

  • 旧 URL 将在内部重写为 photo_seo_url.php
  • photo_seo_url.php 将 301/302 重定向到 SEO URL
  • SEO URL 将在内部重写为原始 photo.php

从理论上讲,这样我就可以获得 SEO URL 的好处,同时能够在闲暇时淘汰旧的 URL。

这些是我使用的规则:

RewriteEngine on
RewriteRule ^photos/.*/photo_([0-9]+)/?$ photos/photo.php?photo=$1 [NC,L]
RewriteCond %{QUERY_STRING} photo=([0-9]+)
RewriteRule ^photos/photo\.php$ photos/photo_seo_url.php?photo=%1 [NC,L]

但这会进入无限重定向循环。为什么,如果这两个正在进行内部重写而不是外部重定向 - 或者这就是我所缺少的?

我已经解决了添加新文件 showphoto.php 的问题,该文件只包含原始 photo.php,并更改第 2 行:

RewriteEngine on
RewriteRule ^photos/.*/photo_([0-9]+)/?$ photos/showphoto.php?photo=$1 [NC,L]
RewriteCond %{QUERY_STRING} photo=([0-9]+)
RewriteRule ^photos/photo\.php$ photos/photo_seo_url.php?photo=%1 [NC,L]

但是我还是想明白为什么原版会死循环。我错过了或误解了一些东西。我的方法合理吗?

最佳答案

回答你的问题,为什么会出现这个循环?这就是 SEO URI 发生的情况,比如 GET/photos/OH-LTU/Finnair_Airbus_330-202X/OUL_EFOU_Oulu/photo_3392/

  • 规则 1 触发将其转换为 GET/photos/photo.php?photo=3392 触发内部重定向,然后重新开始扫描 .htaccess文件。

  • 然后规则 2 触发将其转换为 GET photos/photo_seo_url.php?photo=339 触发内部重定向,再次重新开始扫描 .htaccess文件。

  • 没有进一步的匹配发生,因此它被传递给脚本 photos/photo_seo_url.php 然后执行 302 到 /photos/OH-LTU/Finnair_Airbus_330-202X/OUL_EFOU_Oulu/photo_3392/ 并且浏览器检测到重定向循环。

您需要触发规则 1,以防止即使在内部重定向后触发规则 2。一种方法是设置一个环境变量,比如 END(在下一次传递时转换为 REDIRECT_END)并在设置时跳过规则:

RewriteEngine on
RewriteBase /

RewriteRule ^photos/.*/photo_([0-9]+)/?$ photos/photo.php?photo=$1 [NC,E=END:1,L]

RewriteCond %{ENV:REDIRECT_END}:%{QUERY_STRING} ^:photo=([0-9]+)$
RewriteRule ^photos/photo\.php$ photos/photo_seo_url.php?photo=%1 [NC,L]

另一种方法是向重写的 URI 添加一个虚拟 noredir 参数并添加:

RewriteCond   %{QUERY_STRING}   !\bnoredir

到原来的第二条规则。但是,photo.php 需要忽略它。希望这会有所帮助:-)

关于.htaccess 和 SEO URLs - 为什么这是一个无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903550/

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