Working but would like to know proper way

New to mod_rewrite? This is a good place to start.

Working but would like to know proper way

Postby paulsheff » Tue Aug 25, 2009 4:07 am

This code:

Code: Select all
# 25/08/09
Options +FollowSymlinks
RewriteEngine on

#Redirect from website.com to www.website.com
RewriteCond %{HTTP_HOST} ^website\.com [NC]
RewriteRule ^(.*)$ http://www.website.com/$1 [R=301,L]

#Redirect index.php to /
RewriteCond %{THE_REQUEST} ^.*\/index\.php\ HTTP/
RewriteRule ^(.*)index\.php$ /$1 [R=301,L]

#####

# website.com/language to website.com/language/
# website.com/language/ to website.com/default.php?language=language
RewriteRule ^([a-z]+)$ /$1/ [R=301]
RewriteRule ^([a-z]+)/?$ /default.php?language=$1 [L]

# website.com/language/page to website.com/language/page/
# website.com/language/page/ to website.com/default.php?language=language&page=page
RewriteRule ^([a-z]+)/([^/]+)$ /$1/$2/ [R=301]
RewriteRule ^([a-z]+)/([^/]+)/?$ /default.php?language=$1&page=$2 [L]


Works great and passes the language and page values fine.

However when I tried

Code: Select all
# website.com/language to website.com/language/
# website.com/language/ to website.com/default.php?language=language
RewriteRule ^([^/]+)$ /$1/ [R=301]
RewriteRule ^([^/]+)/?$ /default.php?language=$1 [L]

# website.com/language/page to website.com/language/page/
# website.com/language/page/ to website.com/default.php?language=language&page=page
RewriteRule ^([^/]+)/([^/]+)$ /$1/$2/ [R=301]
RewriteRule ^([^/]+)/([^/]+)/?$ /default.php?language=$1&page=$2 [L]


when requesting anything on the site I got directed to a not found:

http://www.website.com/default.php/?lan ... efault.php

Can anyone tell me what's going on and how I'd fix it for future reference? index.php is the landing page, default.php is going to handle the rest of the site content.

Thanks
paulsheff
 
Posts: 25
Joined: Wed Oct 04, 2006 1:12 pm

Postby richardk » Sat Aug 29, 2009 2:13 pm

Code: Select all
RewriteRule ^([^/]+)$ /$1/ [R=301]

redirects the internal requests to /default.php?qs to /default.php/?qs.

You can test if the request is an existing file or directory
Code: Select all
Options +FollowSymlinks
RewriteEngine on

# Redirect from example.com to www.example.com
RewriteCond %{HTTP_HOST} ^(example\.com)$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

# Redirect index.php to /
RewriteCond %{THE_REQUEST} \ /(.+/)?index\.php(\?.*)?\  [NC]
RewriteRule ^(.+/)?index\.php$ /$1 [R=301,L]

# /language to /language/
# /language/page to /language/page/
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^[^/]+(?:[^/]+)?$ /$0/ [R=301,L]

# /language/ to /default.php?language=language
RewriteRule ^([^/]+)/$         /default.php?language=$1         [L]
# /language/page/ to /default.php?language=language&page=page
RewriteRule ^([^/]+)/([^/]+)/$ /default.php?language=$1&page=$2 [L]
richardk
 
Posts: 8800
Joined: Wed Dec 21, 2005 7:50 am


Return to Beginner's Corner

Who is online

Users browsing this forum: No registered users and 34 guests

cron