11

I'm programming the new version of my website and I'm trying to get .htaccess to rewrite properly. My new site is stored here:

www.example.com/storage/new/ 

I need to rewrite these URLs:

www.example.com/storage/new/welcome/ -> index.php?action=welcome www.example.com/storage/new/page/name/ -> index.php?action=page&url=name www.example.com/storage/new/post/name/ -> index.php?action=post&url=name 

This is my .htaccess file:

RewriteEngine On RewriteRule ^/welcome/$ index.php?action=welcome [L] RewriteRule ^/page/([a-zA-Z0-9]+)/$ index.php?action=page&url=$1 [L] RewriteRule ^/post/([a-zA-Z0-9]+)/$ index.php?action=post&url=$1 [L] 

It does not work, however; all results in a 404 Not Found. I've tried everything, even typing out www.example.com/storage/new/ in lieu of ^. I have another .htaccess in the server root (www.example.com) that looks like this:

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

I can't imagine how that would affect www.example.com/storage/new/ but you never know. Can anyone help me with this?

2 Answers 2

11

I had to e-mail my server's administrator for help and it turns out that .htaccess treats its own path as root; I simply removed the first / before the ^ in each rule. My final .htaccess file looks like this:

RewriteEngine On RewriteRule ^welcome/$ index.php?action=welcome [L,QSA] RewriteRule ^page/(.*)/$ index.php?action=page&url=$1 [L,QSA] RewriteRule ^post/(.*)/$ index.php?action=post&url=$1 [L,QSA] 
Sign up to request clarification or add additional context in comments.

Comments

3

The ^ means the start of the string. The RewriteRules will look at everything after example.com/ so you need to include storage/new/ in your pattern (or remove the ^).

Also I'd probably want to add the NC flag so your pattern is matched without regards to case sensitivity (e.g. /Page/ or /page/ will both work). Which means you can change the [a-zA-Z0-9] pattern to just [a-z0-9]

RewriteRule ^storage/new/welcome/$ index.php?action=welcome [L,NC] RewriteRule ^storage/new/page/([a-z0-9]+)/$ index.php?action=page&url=$1 [L,NC] RewriteRule ^storage/new/post/([a-z0-9]+)/$ index.php?action=post&url=$1 [L,NC] 

3 Comments

Thank you for your response, although it still does not work. I've tried everything I can think of and read more tutorials than I can count. What could possibly be wrong?
ok, try adding a rewrite and make sure you end up on the URL you're expecting: RewriteRule ^storage/new/welcome/$ index.php?action=welcome [L,NC,R=301]
Still nothing. There is definitely something else wrong. I'll file a support ticket. Thanks for all your help!