【问题标题】:Redirects in htaccess file not workinghtaccess 文件中的重定向不起作用
【发布时间】:2015-11-08 18:46:36
【问题描述】:

我有一个包含 700 多个重定向的 htaccess 文件,其中大多数根本不起作用。即使它们在同一个域中,我也会得到一个 404 页面。以下是其中 5 个不起作用:

Redirect 301 /orlando-airport/fly-snooze-cruise-hotel-packages-orlando-airport-1-person.html /fly-snooze-cruise/orlando-airport/
Redirect 301 /orlando-airport/fly-snooze-cruise-hotel-packages-orlando-airport-2-people.html /fly-snooze-cruise/orlando-airport/
Redirect 301 /orlando-airport/fly-snooze-cruise-hotel-packages-orlando-airport-3-people.html /fly-snooze-cruise/orlando-airport/
Redirect 301 /orlando-airport/fly-snooze-cruise-hotel-packages-orlando-airport-4-people.html /fly-snooze-cruise/orlando-airport/
Redirect 301 /orlando-airport/fly-snooze-cruise-hotel-packages-orlando-airport-5-people.html /fly-snooze-cruise/orlando-airport/

我已经检查了域请告诉我我做错了什么。感谢所有帮助。

【问题讨论】:

  • 他们会重定向吗?他们是否重定向到正确的位置?或者您是否收到原始网址的 404 错误?

标签: .htaccess redirect http-redirect


【解决方案1】:

你只能使用一个:

RewriteRule ^orlando-airport/fly-snooze-cruise-hotel-packages-orlando-airport-\d+-person\.html$ /fly-snooze-cruise/orlando-airport [R=301,L]

【讨论】:

  • 这会产生 500 内部服务器错误RewriteRule ^orlando-airport/americas-best-cocoa-beach/[2-20]-people-fly-snooze-cruise-hotel-package.html$ /fly-snooze-cruise/orlando-airport/americas-best-cocoa/$1-people [R=301,L]
  • 那是 5... 使用 \d+ 代表所有值,或 (?:1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20) 代表 20 个值
  • 我最终使用了([0-9]+)。它要短得多,而且效果很好。我从这个帖子中得到了答案:stackoverflow.com/questions/32031996/htaccess-regex-redirecting
  • \d+[0-9]+ 的缩写
【解决方案2】:

好的,我发现 mod_rewrite 部分中的重写规则以某种方式与重定向混淆了。所以我将“重定向 301”转换为 mod_rewrite.c 中的重写规则,一切正常。

RewriteRule ^orlando-airport/fly-snooze-cruise-hotel-packages-orlando-airport-1-person.html$ /fly-snooze-cruise/orlando-airport [R=301,L]
RewriteRule ^orlando-airport/fly-snooze-cruise-hotel-packages-orlando-airport-2-people.html$ /fly-snooze-cruise/orlando-airport [R=301,L]
RewriteRule ^orlando-airport/fly-snooze-cruise-hotel-packages-orlando-airport-3-people.html$ /fly-snooze-cruise/orlando-airport [R=301,L]
RewriteRule ^orlando-airport/fly-snooze-cruise-hotel-packages-orlando-airport-4-people.html$ /fly-snooze-cruise/orlando-airport [R=301,L]
RewriteRule ^orlando-airport/fly-snooze-cruise-hotel-packages-orlando-airport-5-people.html$ /fly-snooze-cruise/orlando-airport [R=301,L]

【讨论】:

  • 吸取了教训。你不应该混合使用 mod_alias (Redirect) 和 mod_rewrite (RewriteRule) 的重定向。由于它们属于不同的模块,它们不一定按照它们在 .htaccess 文件中出现的顺序运行,因此结果可能出乎意料。但正如@Croises 指出的那样,这些重定向看起来好像可以大大简化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 2015-03-07
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多