jardane
jardane

Reputation: 471

combine two .htaccess rewrite files

I have two different .htaccess files each doing different things and when i combine them they won't work together.

the first one allows me to enter www.mydoman.com/test and have it mean www.mydomain.com/index.php?page=test

RewriteRule    ^([A-Za-z0-9-_]+)/?$  index.php?subclass=$1 [NC,L]
RewriteRule    ^.* index.php [NC,L]

The second file cuts off the extension from .html and .php files so can use www.mydomain.com/about insted of www.mydoman.com/about.php

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On

RewriteBase /cl_clone

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]

# e.g. example.com/foo will display the contents of example.com/foo.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

Is there a way to allow both of these to work together in one .htaccess file?

Upvotes: 1

Views: 105

Answers (1)

Jon Lin
Jon Lin

Reputation: 143896

You have a redirect rule at the top, and then 2 sets of rules to add either the php or html extensions to the end of the request, if such a file exists. Then your other rule does routing for index.php.

Some things you'll need to work out. You have the rewrite base /cl_clone which doesn't seem like it's going to work at all, in either of the cases, because your URLs don't have cl_clone in the request (e.g. they are simply www.mydomain.com/about, no cl_clone).

So you probably want to remove that.

Otherwise, you can simply add the index.php routing rules at the very bottom of the other rules that you have. You may need to add additional tweaking, perhaps:

RewriteRule    ^([A-Za-z0-9-_]+)/?$  index.php?subclass=$1 [NC,L]
RewriteCond %{REQUEST_URI} !index.php
RewriteRule    ^.* index.php [NC,L]

Or changing your RewriteBase /cl_clone to RewriteBase /

Upvotes: 1

Related Questions