yarek
yarek

Reputation: 12054

.htaccess : redirect permanent and stop new rules

I have that rule that works well

RedirectMatch 301 ^/(.*?)-/(.*)$ /$1/$2

It redirects for instance

http://example.com/category-/list/town/id/id2/country ->

http://example.com/category/list/town/id/id2/country

Problem is, later .htaccess adds some extra query parameters.

My goal is: when this rule is matches, then do not apply other .htaccess rules

I tried with:

RewriteRule ^/(.*?)-/(.*)$ /$1/$2 [R=301,L]

and rule is not applied at all !

Upvotes: 0

Views: 169

Answers (1)

Olaf Dietsche
Olaf Dietsche

Reputation: 74078

As @hjpotter92 mentioned in the comments, the pattern is without the leading slash in .htaccess files. See Apache mod_rewrite Technical Details

In per-directory context (i.e., within .htaccess files and Directory blocks), these rules are being applied after a URL has already been translated to a filename. Because of this, the URL-path that mod_rewrite initially compares RewriteRule directives against is the full filesystem path to the translated filename with the current directories path (including a trailing slash) removed from the front.

To illustrate: If rules are in /var/www/foo/.htaccess and a request for /foo/bar/baz is being processed, an expression like ^bar/baz$ would match.

RewriteRule has a similar note in the section "Per-directory Rewrites".

So your rule should look like

RewriteRule ^(.*?)-/(.*)$ /$1/$2 [R,L]

If you have this RewriteRule, you don't need the RedirectMatch anymore.

Upvotes: 1

Related Questions