重写URL以使查询字符串在路径中

时间:2013-04-15 17:15:13

标签: mod-rewrite

我正在尝试获取以下路径:/faculty/index.php?PID=FirstLast&type=alpha

要重写为:/faculty/FirstLast

我是否正确认为以下内容可以接受.htaccess?

# Rewrite old URLS
RewriteCond %{QUERY_STRING} ^PID=([0-9a-zA-Z]*)$
RewriteRule ^/faculty/index.php$ /faculty/%1 [R=302,L]

我可以扔掉任何其他查询字符串变量。我在.htaccess文件级别应用这些规则。该项目是从旧系统迁移到Drupal。

结果:

我的.htaccess看起来像

  # Rewrite old  URLS
  RewriteCond %{QUERY_STRING} PID=([0-9a-zA-Z]*)
  RewriteRule ^faculty/ /faculty/%1/? [R=301,L]

  RewriteCond %{QUERY_STRING} vidID=([0-9]*)
  RewriteRule ^videos/ /video/id/%1/? [R=301,L]

我还发现了这个很棒的工具 - 一个mod_rewrite测试器 http://htaccess.madewithlove.be/

一切都好!

1 个答案:

答案 0 :(得分:1)

请改为尝试:

RewriteRule ^faculty/index.php$ /faculty/%1? [R=302,L]

前导斜杠不在规则中测试的URI路径中,因此也不能在正则表达式中。

由于查询会自动附加到替换URL(未更改),除非在规则中创建了新查询,否则在使用规则时,尾随问号?将删除现有查询字符串。