全新的这里,完全不是一个编码器,所以要温柔。我在这里的理解水平是关于一个蹒跚学步的孩子,所以假装你在和一个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的任何图像消失。
这些最后的工作,但我看不出他们有什么问题?
任何帮助都将不胜感激,谢谢。提前为我的无知道歉。
1条答案
按热度按时间dz6r00yl1#
flags参数中错误的 * space * 很可能是500错误的原因。这是一个语法错误,因此只需"breaks"。它应该是
[R=410,L]
(没有空格)。当您指定一个非3xx状态码时,L
标志实际上是多余的,因此这与简单的[R=410]
相同。可以进一步简化为[G]
。G
标志是R=410
的简写(即"410消失")。但是,
RewriteRule
* 模式 *(第一个参数)仅与URL路径匹配。这与 * 查询字符串 *(第一个?
之后的URL部分)不匹配。要匹配查询字符串,您需要单独的 * 条件 *(RewriteCond
指令)并与QUERY_STRING
服务器变量(不包括?
前缀)匹配。例如,上面的内容应该写成这样:
这与URL
/stock/thumbnails.php?album=62
* 完全匹配 *。并提供"410消失"。如果有任何其他URL参数(在查询字符串中),则匹配将失败。例如,/stock/thumbnails.php?foo=1&album=62
将不匹配。要匹配查询字符串中任意位置的URL参数
album=62
(如果存在其他URL参数),请调整 * CondPattern *(RewriteCond
指令的第二个参数),如下所示:URL参数前后的额外 * alternate * 子组
(^|&)
和(&|$)
确保我们只匹配确切的URL参数,而不是fooalbum=62
或album=623
等。以上几点应该解决了这个规则的主要问题(匹配查询字符串)。但是,您还需要添加
QSD
标志,以便从重定向响应中删除原始查询字符串。否则,原始查询字符串(即album=1&....
)将被附加到目标URL(例如/gallery/canadian-wildlife-photos/?album=1&...
)的末尾。例如:
注意(mod_alias)
Redirect
指令也不匹配查询字符串(只匹配URL路径)。要匹配查询字符串,需要使用mod_rewrite(RewriteRule
和RewriteCond
),如上所述。