4
votes

Calling all .htaccess gurus. I need your help!

I'm trying to force a rewrite to include #! in the urls.

So basically I need. http://example.com/biography

To be re-written to http://example.com/#!/biography

If it will make any difference my rewrite rules so far are

  RewriteEngine On
  RewriteCond %{HTTPS} !=on

  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
  RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

  RewriteCond $1 !^(images|system|files|themes|static|favicon\.ico|robots\.txt|index\.php) [NC]
  RewriteRule ^(.*)$ /index.php/$1 [L]

I suck at this stuff so any help will be greatly appreciated.

Additionally...

I have this test doing what I need it to do in this htaccess tester. http://htaccess.madewithlove.be/ But it won't work when I try it on my site...

RewriteCond %{REQUEST_URI} !^/#!
RewriteRule ^(.*)$ /#!/$1 [L]

No ideas as to why it won't work?

Thanks, Mark.

1
dunno if you're allowed to rewrite a url to something with a hash....but could redirecting work for you?mpen
# in the url is clientside, so you can do that only with a redirectdaniels

1 Answers

8
votes

Have your .htaccess like this:

Options +FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteRule ^(biography)/?$ /#!/$1 [R,L,NE,NC]

RewriteCond $1 !^(images|system|files|themes|static|favicon\.ico|robots\.txt|index\.php) [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]

Remember you cannot have a condition to check for /#! in .htaccess because that part is handled in browsers only and not sent to web server.