如何在启用Drupal Clean URL时重定向特定的URL模式?

时间:2010-12-01 22:52:33

标签: apache drupal mod-rewrite

我使用带有Apache和mod_rewrite模块的干净URL安装了Drupal 5.23。我使用.htaccess文件来获取干净的URL功能,并使用以下配置:

<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !=/favicon.ico
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

我将禁用网站上的本地化/国际化插件,这会将网站上的每个网页的网址从http://www.example.com/en/url-to-a-page更改为http://www.example.com/url-to-a-page/en部分被剥夺了。)

我想添加一个mod_rewrite规则,为URL中/en部分的任何传入URL提供HTTP 301重定向响应,以便将它们定向到正确的页面。

我尝试将以下行添加到现有规则上方和下方的.htaccess文件中,但在两种情况下,使用/en访问页面都会导致HTTP 404 Not Found响应:< / p>

RewriteRule ^en/(.+)$ http://www.example.com/$1 [R=301]

如果我评论现有规则,我的规则就可以了。我还尝试在规则中添加条件,但这似乎也没有效果:

RewriteCond %{REQUEST_URI} =/en/*

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

除了sillygwailo建议的内容之外,我建议你确保你的RewriteCond(我认为需要)实际匹配..

来自apache docs:

  

= CondPattern'(按字典顺序排列)
  将CondPattern视为普通字符串,并按字典顺序将其与TestString进行比较。如果TestString在词典上等于CondPattern(两个字符串完全相同,字符为字符),则为True。如果CondPattern是“”(两个引号),则将TestString与空字符串进行比较。

那么,它可能只匹配包含实际'*'的URL ...?不确定,但你也可以试试这个:

RewriteCond %{REQUEST_URI} ^/en/.*