Welcome to WebmasterWorld Guest from 54.196.145.173

Forum Moderators: Ocean10000 & incrediBILL & phranque

Message Too Old, No Replies

htaccess wrong code ?

something strange

     
3:01 pm on Nov 15, 2010 (gmt 0)

Preferred Member

10+ Year Member

joined:Oct 7, 2002
posts: 403
votes: 0


hello guys,
is this code correct?
-----------------------------

Options +FollowSymLinks -MultiViews
RewriteEngine on
#
RewriteRule ^http://www.sample.com/folio.html/ [sample.com...] [R=301,L]

RewriteRule ^http://www.sample.com/Residential.html/ [sample.com...] [R=301,L]

------------------------------


but this code doesn't work, where is a mistake?
3:12 pm on Nov 15, 2010 (gmt 0)

Preferred Member

10+ Year Member

joined:June 10, 2003
posts: 410
votes: 0


Noximus --

The first parameter of the RewriteRule contains only the path info, not the fully qualified domain name.

If your RewriteRule is in the server configuration or a VirtualHost configuration, then the path will start with a /. If it is in a .htaccess file (more common, less desirable if you have the choice between the two) then the path will not start with the /. In the latter case, you'll also have to set RewriteBase.

Here's code for a server-base/virtual host context:


Options +FollowSymLinks -MultiViews
RewriteEngine on

RewriteRule ^/folio.html$ http://www.sample.com/Showcase.htm [R=301,L]
RewriteRule ^/Residential.html$ http://www.sample.com/Stones.htm [R=301,L]


In a .htaccess context it would be



Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /

RewriteRule ^folio.html$ http://www.sample.com/Showcase.htm [R=301,L]
RewriteRule ^Residential.html$ http://www.sample.com/Stones.htm [R=301,L]



The ^ means "starts with" -- a good practice to get into (you might, for example have a "Portfolio.html" page, which would also match :-). $ means "ends with".

Tom
4:17 pm on Nov 15, 2010 (gmt 0)

Preferred Member

10+ Year Member

joined:Oct 7, 2002
posts: 403
votes: 0


Tom,
Thank you very much, you helped me a lot.

good luck online and offline.
3:22 pm on Nov 16, 2010 (gmt 0)

Senior Member

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

joined:Mar 31, 2002
posts:25430
votes: 0


Note that literal spaces in the regular-expressions patterns should be escaped to avoid ambiguity.

In a server config file, outside of any <Directory> sections:

Options +FollowSymLinks -MultiViews
RewriteEngine on
#
RewriteRule ^/folio\.html$ http://www.example.com/Showcase.htm [R=301,L]
RewriteRule ^/Residential\.html$ http://www.example.com/Stones.htm [R=301,L]

- or -
In a .htaccess file, or within a <Directory> section in a server config file:

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /
#
RewriteRule ^folio\.html$ http://www.example.com/Showcase.htm [R=301,L]
RewriteRule ^Residential\.html$ http://www.example.com/Stones.htm [R=301,L]

It is also generally recommended that all URLs be specified as all-lowercase, to make URL canonicalization possible without having to resort to scripted solutions or to solutions which require CPU-intensive 'file-exists' checks.

Yes, mixed-case URLs can "look more attractive," but can lead to *major* headaches if people link to mis-cased URLs; If the correct URLs are always all-lowercase, this problem can be easily fixed simply by rewriting the mis-cased URL requests to all-lowercase. If the correct URLs are mixed-case, then the filesystem must first be searched to determine the correct casing, which is expensive in terms of server performance, and may be almost impossible without using a scripted approach to determine the 'most likely correctly-cased URL.' Certain combinations of URL-rewriting and mixed-case URL usage may in fact make this impossible to do, leading to lost business opportunity due to the visitors receiving 404-Not Found errors from mis-cased links.

Jim
3:37 pm on Nov 16, 2010 (gmt 0)

Preferred Member

10+ Year Member

joined:June 10, 2003
posts: 410
votes: 0


To clarify Jim's comment, I failed to properly escape the . in the filename -- without being escaped the . means "a character". This character could be anything, and is probably a "." but could be a space, or any other character.

I strongly agree with Jim's advice to make URIs lowercase. The HTTP spec allows to domains to (www.example.com) to be delivered in any case, so any matching on domains should use the [NC] flag, however the path part of a URL is case sensitive. To avoid confusion, go with lower-case.
3:54 pm on Nov 16, 2010 (gmt 0)

Preferred Member

10+ Year Member

joined:Oct 7, 2002
posts: 403
votes: 0


Thank you very much Jim.