0

我正在尝试在其 .htaccess 文件中为我的 drupal 站点编写一些重写规则,但它似乎根本不起作用。我在正则表达式和 mod_rewrite 方面缺乏先验知识和经验似乎也无济于事。

我试图重写的 URL 如下

来源:

http://www.mydrupalsite.com/somealphanumericwithspecialchars/somealphanumericwithspecialchars/somealphanumericwithspecialchars/somealphanumericwithspecialchars/Keyword1/Keyword2/UNIQUEID?queryparam1=somenumber

目的地:

http://www.mydrupalsite.com/legacystuff/UNIQUEID

我的 .htaccess mod_rewrite 代码是

  RewriteEngine on
  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  #This is the only rule written by me others are drupals
  RewriteRule ^(.*)/(.*)/(.*)/(.*)/Keyword1/Keyword2/([0-9]*)?$ legacystuff/content/$5 [R=302]
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

基于对教程的一些快速浏览,我的理解和实现是前四个(.*)将与 URL 中的四个字母数字特殊字符匹配,关键字 1 和关键字 2 将保持不变,因此我可以匹配它们,我的目的地实际需要的唯一数字 id URL(目标中的参数 $5)将被([0-9*])?. 我在本地环境的httpd.conf中使用以下虚拟主机

<VirtualHost *:80>
DocumentRoot "C:/wamp/www/mydrupalsite"
ServerName mydrupalsite.com
</VirtualHost>

我的问题是重新启动本地服务器并清除缓存后,不会发生从源 URL 到目标 URL 的重定向。任何关于我哪里出错以及如何改正的帮助都将不胜感激。

4

1 回答 1

0

终于让它工作了,为我的虚拟主机设置添加了 RewriteBase 并将我的 RewriteRule 放在它下面,尾随 ? 在我的目的地忽略查询字符串和 L 标志。在我的 httpd.conf 中设置 RewriteLog 有助于从更好的角度理解事物。希望这可以帮助其他刚接触 .htaccess 在 drupal 中的人。

RewriteBase /
RewriteRule ^(.*)/(.*)/(.*)/(.*)/Keyword1/Keyword2/([0-9]*)?$ legacystuff/content/$5? [R=301,L]  
于 2012-05-03T15:15:37.697 回答