Andrei Răileanu
Andrei Răileanu

Reputation: 137

What am I doing wrong with this .htaccess?

I have the following .htaccess file:

RewriteEngine On
RewriteBase /
RewriteRule ^/(.*)/(.*)/(.*)$    index.php?pageLevel1=$1&pageLevel2=$2&pageLevel3=$3 [L,R=301]

When I access my website using http://www.domain.com/testpage/ it gives me the 404 Not Found error. What am I doing wrong?

PS: currently the index.php files just echo the pageLevel1, pageLevel2 and pageLevel3 values.

Upvotes: 1

Views: 43

Answers (2)

IOArmy
IOArmy

Reputation: 25

First of, I don't know why are you using the 301 redirection at all? If you want to accept all characters in the url you just need to have a catch-all rewrite rule like this:

RewriteRule ^(.*)$ index.php?param=$1 [L]

If you want to catch the parameters like you defined, the rewrite rules can be like this:

RewriteRule ^([A-Za-z-]+)/([A-Za-z-]+)/([A-Za-z-]+)$ index.php?pageLevel1=$1&pageLevel2=$2&pageLevel3=$3 [L]

UPDATE:

The completed rules in your case (three page levels), with URL slugs which accepts letters and numbers can be like:

RewriteRule ^([A-Za-z0-9-]+)$ index.php?pageLevel1=$1&pageLevel2=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)$ index.php?pageLevel1=$1&pageLevel2=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)$ index.php?pageLevel1=$1&pageLevel2=$2&pageLevel3=$3 [L]

This way you can access pages like:

www.domain.com/test
www.domain.com/test/another-test
www.domain.com/test/another-test/new-level

Upvotes: 1

Amit Verma
Amit Verma

Reputation: 41219

Remove the leading slash from Rewrite pattern

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)/(.*)/(.*)$ index.php?pageLevel1=$1&pageLevel2=$2&pageLevel3=$3 [L,R=301]

Upvotes: 2

Related Questions