Reputation: 5
I have all of my customers sites in a directory on my subdomain:
customers.example.com/sites/customer_name
I want to rewrite the url so my customers only need to write
customers.example.com/customer_name
I have tried some different htacces
scripts but none of them works. And one of them gives me a error 500 internal server error
, so my mod_rewrite
is active
Here is my current .htaccess
file:
RewriteEngine On
RewriteRule ^sites/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301]
RewriteRule ^(.*)$ /sites/$1/ [QSA,L]
Upvotes: 0
Views: 55
Reputation: 143886
Since the rewrite engine loops, this pattern ^(.*)$
will blindly match everything, including your rule's target: /sites/something
. It'll continue to append /sites/
to the front of the URI until you end up with something like /sites/sites/sites/sites/sites/sites/sites/
etc.
You need to add some conditions to prevent the looping, something like this:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /sites/$1/ [L]
or
RewriteCond %{REQUEST_URI} !^/sites/
RewriteRule ^(.*)$ /sites/$1/ [L]
or
RewriteCond %{DOCUMENT_ROOT}/sites%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/sites%{REQUEST_URI} -d
RewriteRule ^(.*)$ /sites/$1/ [L]
Upvotes: 1
Reputation: 26066
This should work… If understand your end goal correctly. But unclear if you want the content accessible from customers.example.com/sites/customer_name
and customers.example.com/customer_name
at the same time:
RewriteEngine on
RewriteRule ^/sites/(.*)$ http://customers.example.com/$1 [L,R=301]
Upvotes: 0