« Custom PHP.ini with FastCGI on DreamHostControl htaccess Basic Authentication with PHP and mod_rewrite »
Rewrite underscores to hyphens for SEO URL
February 22nd, 2007
Contents
This Apache .htaccess code 301 redirects requests for URLs with underscores (_) to the URL with hyphens.
SEO benefits of using hyphens/dashes over underscores
According to Matt Cutts the choice is clearly to use dashes or hyphens instead of underscores.
So instead of article_this_is_awesome_page.html you want article-this-is-awesome-page.html.
I often get asked whether I'd recommend dashes or underscores for words in urls. For urls in Google, I would recommend using dashes.
Example Usage
When http://d.com/the_top_apache_htaccess_article.html is requested by a browser or search engine, a Search-Engine Friendly 301 Redirect is sent telling the client that the correct location for the resource is at http://d.com/the-top-apache-htaccess-article.html
The Apache .htaccess underscore to hyphen conversion code
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule !\.(html|php)$ - [S=6]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5-$6-$7 [E=underscores:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5-$6 [E=underscores:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=underscores:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4 [E=underscores:Yes]
RewriteRule ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3 [E=underscores:Yes]
RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=underscores:Yes]
RewriteCond %{ENV:underscores} ^Yes$
RewriteRule (.*) http://www.askapache.com/$1 [R=301,L]
Further Reading
- The Worlds Greatest Apache .htaccess Guide
- Article in htaccessElite forum:Rewrite urls separated by _ underscores to - dashes
Reader Comments
-
How i redirect url to error page when we find & or = in url Please give me the solution
-
And what's your suggestion if the URL can include up to 16 underscores that should be rewritten to hyphens?
-
The article's example code has S=5 option (skip next five rules) followed by six underscore-elimination rules.
-
how can you use this rewrite but exclude directories
-
Hello i just wondering if there is anyway to rewrite underscores to slashes. Thanks in advance, sorry for my bad english.
-
it would be better to have html and php extensions skipped using a condition yet still allow querystrings. but more importantly to use one rule to replace underscores and loop it with the N flag instead of trying to anticipate how many there'll be. this version addresses those issues and trims consecutive underscores to a single hyphen. Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !\.(html|php)($|\?) [NC] RewriteRule ^([^_]*)_+(.*)$ $1-$2 [E=underscores:Yes,N] RewriteCond %{ENV:underscores} ^Yes$ RewriteRule (.*) http://%{HTTP_HOST}/$1 [R=301,L]
-
Haven't be able to get this to work, and I've tried all of the variations in the two further reading links. I have the file extensions removed on the old site and on the new, so all I really need to do is rewrite the underscores to dashes. Love to know where I'm going wrong but not being a tech, I don't really know where toe start. PS At the moment I'm testing on a local wamp setup before I go messing around with a live environment.
-
Hello can anyone tell me how can i edit a htaccess multicommand file?i m currently using user friendly code and i added codes for broken links and code for fclearing query_strings but at the and it did not work: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /friendly_url.php ErrorDocument 400 http://www.sicaktakip/error_404.html ErrorDocument 401 http://www.sicaktakip/error_404.html ErrorDocument 403 http://www.sicaktakip/error_404.html ErrorDocument 404 http://www.sicaktakip/error_404.html ErrorDocument 500/http://www.sicaktakip/index.php RewriteCond %{QUERY_STRING} ^source= RewriteRule (.*) /$1? [R=301,L] Anyone any idea for that?
-
Hi - Great resource. At the risk of sounding ignorant, could you please tell me where abouts (i.e. in which directory/folder/subdirectory I would place this code to ensure the rewrite to dashes works? Thanks
