.htaccess 有一些重定向/重写代码的问题.. 301和410 s

ikfrs5lh  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(117)

全新的这里,完全不是一个编码器,所以要温柔。我在这里的理解水平是关于一个蹒跚学步的孩子,所以假装你在和一个5岁的孩子说话,我应该能够跟上。
我换了一个新的服务器,不再使用coppermine gallery了。我无法从旧的cpg gallery和图片中获得重定向。
对于我不会重定向的专辑和类别
(The我想在这里重定向的URL将是)http://www.example.com/stock/thumbnails\.php\?album=62
它们消失了,不再存在了,我把410法则写成
RewriteRule ^stock/thumbnails\.php\?album=62$ - [R=410, L]
这会破坏新站点并创建500错误
对于我想重定向到新URL的旧相册,例如此URL http://www.example.com/stock/thumbnails\.php\?album=3
我写了
RewriteRule ^stock/thumbnails\.php\?album=36$ https://www.example.com/gallery/appalachian-trail-photos/ [R=301,L]
但是它什么也不做。网址显示为404页。我也试过它作为
Redirect 301 /stock/index.php?cat=2 https://www.example.com/gallery/outdoor-recreation-photos/
这也不起作用。
我还想把图片显示页面重定向到相关相册的根图库,这样某个特定的cpg相册的图片就会转到新网站的图库页面,网址如下
http://www.example.com/stock/displayimage.php?album=1&pid=4563#top_display_media
我写了一个重定向

RewriteRule ^stock/displayimage\.php\?album=1&.*$ https://www.example.com/gallery/canadian-wildlife-photos/ [R=301,L]

RewriteRule ^stock/displayimage\.php\?album=32&.*$ - [R=410,L]

以将来自相册1的任何图像发送到CA野生动物照片相册,并且来自相册32的任何图像消失。
这些最后的工作,但我看不出他们有什么问题?
任何帮助都将不胜感激,谢谢。提前为我的无知道歉。

dz6r00yl

dz6r00yl1#

RewriteRule ^stock/thumbnails\.php\?album=62$ - [R=410, L]
                                                       ^--ERROR HERE

flags参数中错误的 * space * 很可能是500错误的原因。这是一个语法错误,因此只需"breaks"。它应该是[R=410,L](没有空格)。当您指定一个非3xx状态码时,L标志实际上是多余的,因此这与简单的[R=410]相同。可以进一步简化为[G]G标志是R=410的简写(即"410消失")。
但是,RewriteRule * 模式 *(第一个参数)仅与URL路径匹配。这与 * 查询字符串 *(第一个?之后的URL部分)不匹配。要匹配查询字符串,您需要单独的 * 条件 *(RewriteCond指令)并与QUERY_STRING服务器变量(不包括?前缀)匹配。
例如,上面的内容应该写成这样:

RewriteCond %{QUERY_STRING} ^album=62$
RewriteRule ^stock/thumbnails\.php$ - [G]

这与URL /stock/thumbnails.php?album=62 * 完全匹配 *。并提供"410消失"。如果有任何其他URL参数(在查询字符串中),则匹配将失败。例如,/stock/thumbnails.php?foo=1&album=62将不匹配。
要匹配查询字符串中任意位置的URL参数album=62(如果存在其他URL参数),请调整 * CondPattern *(RewriteCond指令的第二个参数),如下所示:

RewriteCond %{QUERY_STRING} (^|&)album=62(&|$)
:

URL参数前后的额外 * alternate * 子组(^|&)(&|$)确保我们只匹配确切的URL参数,而不是fooalbum=62album=623等。

RewriteRule ^stock/displayimage.php?album=1&.*$ https://www.example.com/gallery/canadian-wildlife-photos/ [R=301,L]

以上几点应该解决了这个规则的主要问题(匹配查询字符串)。但是,您还需要添加QSD标志,以便从重定向响应中删除原始查询字符串。否则,原始查询字符串(即album=1&....)将被附加到目标URL(例如/gallery/canadian-wildlife-photos/?album=1&...)的末尾。
例如:

RewriteCond %{QUERY_STRING} (^|&)album=1(&|$)
RewriteRule ^stock/displayimage\.php$ https://www.example.com/gallery/canadian-wildlife-photos/ [QSD,R=301,L]
Redirect 301 /stock/index.php?cat=2 https://www.example.com/gallery/outdoor-recreation-photos/

注意(mod_alias)Redirect指令也不匹配查询字符串(只匹配URL路径)。要匹配查询字符串,需要使用mod_rewrite(RewriteRuleRewriteCond),如上所述。

相关问题