Mod rewrite 重写URL,使查询字符串位于路径中

Mod rewrite 重写URL,使查询字符串位于路径中,mod-rewrite,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] 我可以扔掉任何其他查询字符串变量。我正在.

我正在尝试获取以下路径:
/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_重写测试仪

一切都好

试试这个:

RewriteRule ^faculty/index.php$ /faculty/%1? [R=302,L]
前导斜杠不在规则中测试的URI路径中,因此也不能在正则表达式中


由于除非在规则中创建新查询,否则查询将自动附加到替换URL(通过时保持不变),因此在使用规则时,尾随的问号
将删除现有的查询字符串。

您确定已启用mod_rewrite并且您已对此文件夹启用“允许覆盖”?谢谢Joe。是的,它们似乎都起作用了。(由于Drupal中干净的URL正在工作)您是说访问者将键入(或单击链接)
/faculty/index.php?PID=FirstLast&type=alpha
并将其重定向到
/faculty/FirstLast
,还是说您希望访问者能够键入(或单击)
/faculty/FirstLast
并让Apache以静默方式获取
/faculty/index.php?PID=FirstLast&type=alpha
的内容,以便用户只看到“干净”的URL?嗨,Arkanon:我们这样做是为了保持旧书标记处于活动状态。是的,访问者将使用第一个链接
servername.edu/faculty/index.php?PID=FirstLast&type=alpha
,我希望将它们转到
servername.edu/faculty/FirstLast