我正在尝试在其.htaccess文件中为我的drupal网站编写几个重写规则,它似乎根本不起作用。我在正则表达式和mod_rewrite中缺乏先验知识和经验似乎也没有帮助这个原因。
我正在尝试重写的网址如下
来源:
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(目的地中的参数$ 5)将由([0-9*])?
捕获。我在我的本地环境的 httpd.conf 中使用以下vhost
<VirtualHost *:80>
DocumentRoot "C:/wamp/www/mydrupalsite"
ServerName mydrupalsite.com
</VirtualHost>
我的麻烦是重新启动本地服务器并清除缓存后,不会发生从源到目标URL的重定向。任何关于我出错的地方以及如何做到正确的帮助都会非常感激。
答案 0 :(得分:0)
最后让它工作了,为我的虚拟主机设置添加了RewriteBase,并在其下面放置了我的RewriteRule尾随?在我的目的地忽略查询字符串和L标志。在我的httpd.conf中设置RewriteLog有助于从更好的角度理解事物。希望这可以帮助其他人在drupal中新增.htaccess。
RewriteBase /
RewriteRule ^(.*)/(.*)/(.*)/(.*)/Keyword1/Keyword2/([0-9]*)?$ legacystuff/content/$5? [R=301,L]