3

Using a template I have this .htaccess mod_rewrite code that makes my URL's pretty:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^posts.php$ posts.php [L]

# Rewrite www to no-www domain
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule .* http://%1%{REQUEST_URI} [R=301,L]

# Rewrite multiple slashes with single slash after domain
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$ [OR]
RewriteCond %{THE_REQUEST} ^[A-Z]+\s(.*/)/+\sHTTP/[0-9.]+$
RewriteRule .* http://%{HTTP_HOST}/%1 [R=301,L,NE]

# Rewrite multiple slashes with single slash in URL
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,NE,L]

# Remove slash from URL end
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^.+/$ %1 [R=301,NE,L]

# Rewrite backslash with slash
## Works on FF with using AllowEncodedSlashes On in content/httpd.conf
RewriteCond %{REQUEST_URI} ^(.*)\\(.*)$
RewriteRule .* %1/%2 [R=301,NC,L]

# Rewrite query string, Ajax crawling
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule .*$ %{REQUEST_URI}%1? [R=301,L]
RewriteCond %{QUERY_STRING} ^.+$
RewriteCond %{QUERY_STRING} !^url=
RewriteCond %{QUERY_STRING} !api
RewriteRule .*$ %{REQUEST_URI}? [R=301,L]

# Rewrite space with dash
RewriteCond %{REQUEST_URI} ^([^\ ]*)\ (.*)$
RewriteRule .* %1-%2 [R=301,L]

# Rewrite underscore with dash
RewriteCond %{REQUEST_URI} ^([^\_]*)\_(.*)$
RewriteRule .* %1-%2 [R=301,L]

# Remove dot
RewriteCond %{REQUEST_URI} ^([^\.]*)\.(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* %1%2 [R=301,L]

# Remove comma
RewriteCond %{REQUEST_URI} ^([^\,]*)\,(.*)$
RewriteRule .* %1%2 [R=301,L]

# Remove dash before slash
RewriteCond %{REQUEST_URI} ^(.*)\-/(.*)$
RewriteRule ^(.*)\-/(.*)$  %1/%2 [R=301,L]

# Remove dash after slash
RewriteCond %{REQUEST_URI} ^(^\.)\/-(.*)$
RewriteRule ^(.*)\/-(.*)$  %1/%2 [R=301,L]

# Remove .php extension
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*[^.]+\.php(\?[^\ ]*)?\ HTTP/ [NC]
RewriteRule ^(([^/]+/)*[^.]+)\.php$ http://%{HTTP_HOST}/%1$1 [R=301,L]

# Rewrite uppercase letter URL to lowercase with content/httpd.conf RewriteMap lc int:tolower
## Solution without httpd.conf RewriteMap in github.com/laukstein/ajax-seo/wiki/Lowercase-URL
RewriteCond %{REQUEST_URI} .+
RewriteRule ^[^A-Z]*[A-Z] ${lc:%0} [R=301,L]

# Block folder access that begins with a period (like .git, .svn)
RewriteRule "(^|/)\." - [F]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api/?([^\./]*)$ ?api&url=$1 [L,QSA]
RewriteRule ^([^.]*)$ ?url=$1 [L,QSA]

RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]

I've managed to create an exemption to allow the posts.php file to be accessed - However I am clueless on how to allow my pages to access all images stored in the /uploads/ path.

Many thanks, Mike

Mike Thrussell
  • 4,175
  • 8
  • 43
  • 59
  • Wait a minute. .htaccess handles your **incoming** SEO-format URIs and converts them into the dynamic non-SEO format that the server and scripting language (e.g., PHP) can handle. Your code looks like you're trying to convert _outgoing_ links _to_ SEO format, which isn't going to work. What exactly are you trying to do? – Phil Perry Jan 23 '14 at 15:24

1 Answers1

4

Use - for when you don't want the URL to be rewritten. This rule at the top of your file (or after any other rules you want processed first) would do the trick:

RewriteRule ^uploads/ - [L]
Kevin Stricker
  • 17,178
  • 5
  • 45
  • 71