-1

I know that RewriteMap must be defined first before it can be used in .htaccess file. But I am not sure if I can do that in shared hosting or not. Is there any way to do it myself on the server?

What I want to do is redirect URL with uppercase to lowercase. I am trying to do that with .htaccess (If there is any other viable alternative, please describe that). But when I tried to use RewriteMap, it says not allowed. I learned that you need to define it first. So, I need to know if I can do it myself on the server.

Please don't give answers like Ask the Host or the Technical Support about that. I am going to do that. But before that, I would like to get some information on this. Many times the technical team are not good enough. Sometimes we tend to have more knowledge than they do and often I have found them giving incorrect information intentionally or unintentionally. I also want others with similar questions to get their answer. So I am posting this question.

I am also open to any suggestion to do this redirect without using RewriteMap. I have seen some rules which did the redirect but it was not proper. There were some problems with them.

Any help would be welcome and appreciated.

Thank You.

iiR
  • 707
  • 1
  • 6
  • 21
  • 1
    Ask the Host or the Technical Support about that. Period. Only they usually have access to the central server configuration files where this needs to be placed. _“I am also open to any suggestion to do this redirect without using RewriteMap.”_ - RewriteRule that catches anything that contains an uppercase letter, rewrite internally to a script of your own (PHP or other server-side technique), lowercase the URL there, and issue an external redirect. – CBroe Aug 03 '18 at 07:44
  • Technical Support Team informed that I can not use RewriteMap. – iiR Aug 03 '18 at 08:06

1 Answers1

0

I was not able to define RewriteMap but my problem of redirecting the URL with uppercase character to lowercase is solved.

Here is the solution provided by the support team. I am thankful to Alex who provided the solution.

I tested it and it worked well. Hope this will be helpful to others too.

I saw some similar solution but that did not work properly and someone cautioned about the performance issue. It was said to have used too much RAM. If anyone finds any performance issue with this, please do comment about that.

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1]
RewriteRule ![A-Z] - [S=28]
RewriteRule ^([^A]*)A(.*)$ $1a$2
RewriteRule ^([^B]*)B(.*)$ $1b$2
RewriteRule ^([^C]*)C(.*)$ $1c$2
RewriteRule ^([^D]*)D(.*)$ $1d$2
RewriteRule ^([^E]*)E(.*)$ $1e$2
RewriteRule ^([^F]*)F(.*)$ $1f$2
RewriteRule ^([^G]*)G(.*)$ $1g$2
RewriteRule ^([^H]*)H(.*)$ $1h$2
RewriteRule ^([^I]*)I(.*)$ $1i$2
RewriteRule ^([^J]*)J(.*)$ $1j$2
RewriteRule ^([^K]*)K(.*)$ $1k$2
RewriteRule ^([^L]*)L(.*)$ $1l$2
RewriteRule ^([^M]*)M(.*)$ $1m$2
RewriteRule ^([^N]*)N(.*)$ $1n$2
RewriteRule ^([^O]*)O(.*)$ $1o$2
RewriteRule ^([^P]*)P(.*)$ $1p$2
RewriteRule ^([^Q]*)Q(.*)$ $1q$2
RewriteRule ^([^R]*)R(.*)$ $1r$2
RewriteRule ^([^S]*)S(.*)$ $1s$2
RewriteRule ^([^T]*)T(.*)$ $1t$2
RewriteRule ^([^U]*)U(.*)$ $1u$2
RewriteRule ^([^V]*)V(.*)$ $1v$2
RewriteRule ^([^W]*)W(.*)$ $1w$2
RewriteRule ^([^X]*)X(.*)$ $1x$2
RewriteRule ^([^Y]*)Y(.*)$ $1y$2
RewriteRule ^([^Z]*)Z(.*)$ $1z$2
RewriteRule [A-Z] - [N]
RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) /$1 [R=301,L]
</IfModule>
iiR
  • 707
  • 1
  • 6
  • 21
  • `mod_rewrite` is definitely not the best solution to do that. Instead, do this in a server script (php, for instance) – Justin Iurman Aug 03 '18 at 11:24
  • @JustinIurman: Is doing this is PHP better? I thought it is better to do it with .htaccess. Could you (and others too) share information on which way is better and why? – iiR Aug 03 '18 at 11:47
  • 1
    If you really want to do this with `mod_rewrite`, you should at least use a `RewriteMap` (can't be done inside an htaccess, but directly inside the apache config). It's a bit faster than using htaccess for that purpose. Still, it is better to use php (for instance) to do that. Why ? Because `mod_rewrite` is not designed for that purpose, simply. – Justin Iurman Aug 03 '18 at 12:21
  • @JustinIurman: Yes, I agree with you that RewriteMap would have been better. And the main question was about that but it was not possible to define in shared hosting. When compared to PHP redirect, I think htaccess will be faster. – iiR Aug 03 '18 at 12:45
  • Well, what I said is exactly the opposite. There's no way htaccess will be faster than php for that – Justin Iurman Aug 03 '18 at 13:14