Page is a not externally linkable
- Code, Content, and Presentation
-- Apache Web Server
---- Can't Get RewriteRule to Rewrite


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


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


Thread source:: http://www.webmasterworld.com/apache/3683277.htm
Brought to you by WebmasterWorld: http://www.webmasterworld.com