Redirect in htaccess does not work

Hello. Please tell me why the redirect in htaccess may not work after connecting the site to Cloudflare. And how to fix it?

Redirect that stopped working:

Although it reduces all letters as written, the most interesting thing
and it also redirects with a slash in the article. But for some reason it doesn’t work from the main page

Here are the texts of the redirects that are written in it:

================
RewriteEngine on
RewriteBase /

redirect from http or www to https or to a domain without www.

RewriteCond %{HTTP:X-Forwarded-proto} !^https$ [OR]
RewriteCond %{HTTP_HOST} ^www. [NC]
RewriteRule ^ https://iprodvinem.com%{REQUEST_URI} [L,NE,R=301]

301 redirect from pages with slash to without slash

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} !^/page/\d+/$
RewriteCond %{REQUEST_URI} ![^/]$
RewriteRule ^(.*)/$ https://%{HTTP_HOST}/$1 [R=301,L]

301 redirect from pages with extra characters

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.)= [OR]
RewriteCond %{REQUEST_URI} (.
)?$ [OR]
RewriteCond %{REQUEST_URI} (.)&$ [OR]
RewriteCond %{REQUEST_URI} (.
)#
RewriteRule (.*) %1 [R=301,L]

redirect url to lowercase

If there are caps, set HASCAPS to true and skip next rule

RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1]

Skip this entire section if no uppercase letters in requested URL

RewriteRule ![A-Z] - [S=28]

Replace single occurance of CAP with cap, then process next Rule.

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

If there are any uppercase letters, restart at very first RewriteRule in file.

RewriteRule [A-Z] - [N]
RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) /$1 [R=301,L]

Tell me how I can make them work on Cloudflare too?

Best regards, Yuri

The redirect is working. If you are wondering about the extra 301, that’s http->https done on Cloudflare because you have enabled “Always use HTTPS”.
https://cf.sjr.org.uk/tools/check?18232f3fe32d4610b38117fbe7f1ffb5#connection-worker-http

You can shorten this if you want by implementing more or all of the redirects from your Apache configuration on Cloudflare instead using Redirect Rules and normalisation options.

2 Likes

Tell me, how can I make the connection go straight from 301 => 200 without an additional 301?

I would recommend you just ignore that. In browsers, there is only a single 301 redirect, because the https redirect takes place on DNS level. There is no extra request involved.

image

Unless you have a large amount of non-browser traffic, there is nothing to be gained here.

Thank you :slight_smile:

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.