Welcome to WebmasterWorld Guest from 54.211.136.250

Forum Moderators: Ocean10000 & incrediBILL & phranque

Message Too Old, No Replies

Can't Get RewriteRule to Rewrite

Using . as a separator

   
5:13 pm on Jun 25, 2008 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



I'm trying to create a more manageable URL for people. The dynamic URL would be in the form of:

http://www.example.com/index.php?name=Firstname.Lastname

The "easy" URL I want is:

http://www.example.com/Firstname.Lastname

Here is what I've tried:

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^/([a-z]+)\.([a-z]+)$ http://www.example.com/index.php?name=$1.$2 [NC]
RewriteRule ^/(.*)\.(.*)$ http://www.example.com/index.php?name=$1.$2 [NC]
RewriteRule ^/([^/]+)\.([^/]+)$ http://www.example.com/index.php?name=$1.$2 [NC]

RewriteRule ^/([a-z]+)\.([a-z]+)$ /index.php?name=$1.$2 [NC]
RewriteRule ^/(.*)\.(.*)$ /index.php?name=$1.$2 [NC]
RewriteRule ^/([^/]+)\.([^/]+)$ /index.php?name=$1.$2 [NC]

None of these have worked. Is it not possible to use the . as a separator? I've seen other sites doing it, but maybe they're not doing it with htaccess.

[edited by: jdMorgan at 5:41 pm (utc) on June 25, 2008]
[edit reason] example.com [/edit]

5:56 pm on Jun 25, 2008 (gmt 0)

WebmasterWorld Senior Member jdmorgan is a WebmasterWorld Top Contributor of All Time 10+ Year Member



Your fourth rule is correct for the stated purpose if the code is located in httpd.conf or conf.d.

If this code is for .htaccess, be aware that the path to the current .htaccess directory is always stripped from the URL-path examined by RewriteRule -- i.e. the path is "localized" to the .htaccess file's directory. So, if this is the case, you'll need to remove the leading slash from the RewriteRule pattern.

Using "." as a separator will work, as long as no RewriteRules are looking for the "." and treating what follows as a filetype, and as long as you don't have MultiViews (content negotiation) enabled, which would also treat the periods as filetype separators. (For this application, I would suggest using a hyphen or an underscore, just to 'future-proof' your URLs in case you do someday want to use either of these techniques.)

If you still wish to use a period as a separator, then you will also need to explicitly prevent the rewritten request for "index.php?name=firstname.lastname" from being subsequently rewritten to /index.php?name=index.php repeatedly -- in an 'infinite' rewrite loop. Typically, you could do this by adding a RewriteCond.

In example.com/.htaccess:


RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteRule ^([a-z]+)\.([a-z]+)$ /index.php?name=$1.$2 [NC]

Note that the leading slash *will* be present on the URL-path in REQUEST_URI in either httpd.conf, conf.d, or .htaccess, so don't remove it as a result of my comments pertaining to RewriteRule above.

Jim