Gautam P Behera
Gautam P Behera

Reputation: 171

htaccess fails to redirect when encounter whitespace

I am using htaccess for clean url. Which is working fine as long as the parameters doesn't carry whitespace. In which case it converts the space in %20 and I receive 404 error.

So basically the URL: http://localhost:8080/series/dynamics/admin/cleanURL/green%20apple

gives me 404 error. But URL: http://localhost:8080/series/dynamics/admin/cleanURL/greenapple works fine.

Also is there a way I can remove the directory details from the URL, I tried

RewriteRule ^series/dynamics/admin/cleanURL/(.*)$ /$1 [L,NC,R]

But doesn't work

htaccess

<IfModule mod_rewrite.c>
     Options +MultiViews 
     Rewriteengine on
     RewriteBase /series/dynamics/admin/cleanURL/
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteRule ^series/dynamics/admin/cleanURL/(.*)$ /$1 [L,NC,R]
     Rewriterule ^([a-zA-Z0-9]+)/?$ index.php?product=$1
     RewriteRule ^(.*)(\s|%20)(.*)$ /$3-$4 [R=301,L,NE]
     #rewrite group and subgroup e.g. http://.../value1/value2/ [L,NC,QSA]
     Rewriterule ^([a-zA-Z0-9]+(.*)+)/([^/]+(.*)+)/?$ index.php?product=$1&subgroup=$2 [L,NC,QSA]
     </IfModule>

Upvotes: 1

Views: 130

Answers (1)

anubhava
anubhava

Reputation: 785126

You will need to add this rule in your site root .htaccess:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) series/dynamics/admin/cleanURL/$1 [L]

Then have these rules in /series/dynamics/admin/cleanURL/.htaccess:

Options +MultiViews 
Rewriteengine on
RewriteBase /series/dynamics/admin/cleanURL/

RewriteCond %{THE_REQUEST} /series/dynamics/admin/cleanURL/(\S*)\s [NC]
RewriteRule ^ /%1 [L,R=302,NE]

RewriteRule ^([^\s\x20]*)[\s\x20]+(.*)$ $1-$2 [L,R=302,NE]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

Rewriterule ^(\w+)/?$ index.php?product=$1 [L,QSA]

#rewrite group and subgroup e.g. http://.../value1/value2/ [L,NC,QSA]
Rewriterule ^([a-zA-Z0-9]+(.*))/([^/]+(.*))/?$ index.php?product=$1&subgroup=$2 [L,NC,QSA]

Upvotes: 1

Related Questions