开发者

How do I redirect a specific URL pattern when Drupal Clean URLs are on?

开发者 https://www.devze.com 2023-01-28 02:28 出处:网络
I have a Drupal 5.23 installation using clean URLs with Apache and the mod_rewrite module.I am using an .htaccess file for the clean URLs functionality with the following configuration:

I have a Drupal 5.23 installation using clean URLs with Apache and the mod_rewrite module. I am using an .htaccess file for the clean URLs functionality with the following configuration:

<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>

I am going to be disabling the Localization/Internationalization plugins on the website, which is going to change every single page's URL on the website from http://www.example.com/en/url-to-a-page to http://www.example.com/url-to-a-page (the /en portion is being stripped out).

I would like to add a mod_rewrite rule to give an HTTP 301 Redirect response for any incoming URLs with the /en portion in the URL so they are directed to the correct page.

I've tried adding the following lines to my .htaccess file both above and below the existing rules, but in both cases visiting a page with /en results in an HTTP 404 Not Found response:

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

If I comment out the existing rules, my rule开发者_开发技巧 works just fine. I've also tried to add a condition to the rule, but this doesn't appear to have an effect either:

RewriteCond %{REQUEST_URI} =/en/*


This came up for me when writing all of my custom redirects, and it turns out the solution was to add an "L" to the redirect line. Give the following at try:

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

Note the "L" near the end of the line. That, according to the Apache RewriteRule docs, means "Stop the rewriting process here and don't apply any more rewrite rules".


In addition to what sillygwailo suggest, I'd recommend you to make sure that your RewriteCond (needed, I think) actually matches..

from the apache docs:

=CondPattern' (lexicographically equal)
Treats the CondPattern as a plain string and compares it lexicographically to TestString. True if TestString is lexicographically equal to CondPattern (the two strings are exactly equal, character for character). If CondPattern is "" (two quotation marks) this compares TestString to the empty string.

So, It could possibly match only an URL containing an actual '*'..? Not sure, but you could also try this:

RewriteCond %{REQUEST_URI} ^/en/.*
0

精彩评论

暂无评论...
验证码 换一张
取 消