我正在尝试创建 301 重定向以从一个系统移动到另一个系统。我已经确定了将旧 URL 与新 URL 匹配并为我生成所有 301 的过程,但我无论如何都无法让 .htaccess 触发重定向。
我感觉这与我必须使用查询字符串才能在两个系统之间切换有关。无论如何,这是我现在在 .htaccess 文件中的内容:
RewriteEngine on
Options +FollowSymLinks
redirect 301 /cgi-bin/classifieds/classifieds.cgi?db=autos&website=FossilCars&language=&session_key=&search_and_display_db_button=on&results_format=long&db_id=46990&query=retrieval http://domain.com/triumph/tr6/46990
有人知道我在这里可能做错了什么吗?我已经在 Apache 配置中禁用了 cgi-bin 目录(我知道这一点,因为它现在正在加载我们的自定义 404 页面,而不是通用页面)。
谢谢
乔希·彭宁顿
答案1
显然,Apache 在确定 URL 重定向的匹配项时不使用查询字符串。答案是设置 URL 重写。以下是一个对我有用的示例:
# Redirect From
# /cgi-bin/classifieds/classifieds.cgi?db=autos&website=FossilCars&language=&session_key=&search_and_display_db_button=on&results_format=long&db_id=46990&query=retrieval
# To
# /triumph/tr6/46990
RewriteCond %{REQUEST_URI} /cgi-bin/classifieds/classifieds.cgi$
RewriteCond %{QUERY_STRING} ^db=autos&website=FossilCars&language=&session_key=&search_and_display_db_button=on&results_format=long&db_id=46990&query=retrieval$
RewriteRule ^.*$ http://example.com/triumph/tr6/46990? [L,R=301]
RewriteRule 行末尾的 ? 从重定向 URL 中删除查询字符串。