【问题标题】:.htaccess redirects: from old site with variables to Drupal & url aliases.htaccess 重定向:从带有变量的旧站点到 Drupal 和 URL 别名
【发布时间】:2013-02-02 04:29:54
【问题描述】:

请查看此帖子的编辑。我给出的最后一个代码示例是我想要完成的。我正在使用 147 行代码。我想我实际上并没有试图制定规则,而是试图找出带有这些变量的重定向。

好的,我已经研究了几个小时,正则表达式 apache 重写规则变得非常具体,我很难过。客户要求将旧站点 url 重写/重定向到新的 drupal 站点和具有 url 别名的相应页面。有 147 个变量(全部 1 - 216(乱序)) 例子: 我需要

/hardware/bikes.php?recordID=1 to redirect to http://www.bikerus.com/?q=hardware/first-bike-that-really-flies

那么

/hardware/bikes.php?recordID=2 to redirect to http://www.bikerus.com/?q=hardware/second-awesome-bike-that-really-flies

等等

这是我目前所拥有的:

RewriteCond %{QUERY_STRING} ^recordID=([0-9]+)$

RewriteRule ^/hardware/bikes\.php?recordID=%1$ http://www.bikerus.com/?q=hardware/first-bike-that-really-flies

这显然行不通,女士们和小伙子们有什么想法吗?

理想情况下,如果我能找出 Drupal 的另一个我(多年来)还没有弄清楚的问题,那就太好了。 有一个这样的重定向:

redirect 301 /hardware/1.html   http://www.bikerus.com/hardware/first-bike-that-really-flies

改为:

redirect 301 /hardware/1.html   http://www.bikerus.com/?q=hardware/first-bike-that-really-flies

但我的第一个问题是现在的首要任务。 提前致谢。

编辑: 我试图重定向到的文件不是静态的,它们是 Drupal 数据库生成的 url 别名。

最后,是的,我需要制作 147 条单独的记录(硬编码),我的问题是如何做到这一点:

redirect 301 /hardware/bikes.php?recordID=1   http://www.bikesrus.com/?q=hardware/random-bike-title-one
redirect 301 /hardware/bikes.php?recordID=2   http://www.bikesrus.com/?q=hardware/random-bike-title-two-ewhbcfn
redirect 301 /hardware/bikes.php?recordID=3   http://www.bikesrus.com/?q=hardware/random-bike-title-three-kxjhmuflr
redirect 301 /hardware/bikes.php?recordID=4   http://www.bikesrus.com/?q=hardware/random-bike-title-four-more-random-stuff

对于那些不知道的人,Drupal 有一个干净的 url 重写规则,它随我当前正在编辑的 .htaccess 文件一起提供:

RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

所以我也需要能够导航。

【问题讨论】:

  • 第一辆真正能飞的自行车是静态的吗?
  • This:RewriteRule ^/hardware/bikes\.php?recordID=%1$ 永远不会匹配,因为您将查询包含在正则表达式中。
  • 对,我知道。我正在修补它。我只是以此为起点。有什么建议吗?
  • 如果传入的 URL 不包含要添加到替换 URL 中的查询(例如random-bike-title-two-ewhbcfn),则不可能制定单一的通用规则。这些参数无法猜测,因此一种解决方案是硬编码 147 条规则,如您所说,或将所有似乎具有模式 (?) 的传入 URL 直接重定向到脚本。
  • 是的!但这看起来像硬编码吗?

标签: .htaccess drupal mod-rewrite redirect


【解决方案1】:

第二个问题的问题是,redirect 真的很讨厌简单的重定向。你需要一个RewriteRule 来做这个:

redirect 301 /hardware/1.html   http://www.bikerus.com/?q=hardware/first-bike-that-really-flies

更多这样的:

RewriteRule ^([a-zA-Z]+)/$ /?q=$1 [R=301,L]

或者这样:

RewriteRule ^([a-zA-Z]+)/(.*)$ /?q=$1/$2 [R=301,L]

但在你的帖子中并不清楚你从哪里得到 first-bike-that-really-flies 的东西。所以不要明确如何在 Drupal 中处理它。非常适合您的设置。

实际上刚刚回答了一个类似于over heremod_rewrite 问题。可能会给你更多的见解。

【讨论】:

  • 那么 Drupal 的问题是他们有一个内置的 url alias-er。它是这样的: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 但是当你尝试在它上面编写重定向时,它只有在你将变量添加回重定向(或你会得到一个 404),就像我在第二期中提到的那样。感谢您的宝贵时间。
【解决方案2】:

刚刚想通了。

RewriteCond %{THE_REQUEST} recordID=1
RewriteRule . http://www.bikesrus.com/hardware/bike-that-really-flies? [R=301,L]

两者都!!就我自己而言,需要更多的搜索。不同的是,这次我将“硬编码”这个词放入了我的搜索关键字中。感谢所有发表评论的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多