Estou preso a um grande problema, mas deixe-me começar com uma parte dele.
Eu estou empolgado porque isso funciona:
RewriteRule ^(.*)index.html $1 [R=301,L]
enquanto isso não acontece:
RewriteCond %{REQUEST_FILENAME} index\.html [NC]
RewriteRule ^(.*) main.redirect.php [QSA,L]
E este não funciona tão bem:
RewriteRule ^(.*)index.html main.redirect.php [NC,QSA,L]
Alguma idéia?
Estou usando isso como parte de um problema principal, em que o cliente quer que eu faça apenas um redirecionamento para uma ou todas as condições a seguir
- www está faltando (coloque na frente)
- index.html está no final (remova-o)
- CAPS estão presentes (converter em minúsculas)
Para conseguir isso, eu criei um arquivo php que faz tudo isso de uma vez, e eu preciso chamar isso em qualquer uma das condições acima (o arquivo php fará o redirecionamento então):
<?php
$sURL = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
echo '$sURL = ' . $sURL . '<br />';
$sURL = strtolower($sURL);
if (substr($sURL, 0, 4) != 'www.') {
$sURL = 'www.' . $sURL;
}
if (substr($sURL, -10) == 'index.html') {
$sURL = substr($sURL, 0, -10);
}
echo 'Location: http://' . $sURL;
#header('Location: http://' . $sURL, true, 301);
?>
(as linhas de eco são para testes, elas serão removidas e o comando header () será ativado mais tarde)
No arquivo .htaccess, agora tenho o seguinte (logo depois de "RewriteEngine On" e "Options + FollowSymlinks":
# 2014-07-16 RM: Exclude these files from rewriting
RewriteRule \.(js|ico|gif|jpg|jpeg|png|css|pdf)$ - [NC,QSA,L]
# 2014-07-16 RM: Check if the url starts with www
RewriteCond %{HTTP_HOST} ^mydomain\.com [NC]
RewriteRule ^(.*) main.redirect.php [QSA,L]
# 2014-07-16 RM: Check if the url ends with index.html
# RewriteCond %{SCRIPT_FILENAME} ^(.*)index\.html$ [NC]
# RewriteRule ^(.*) main.redirect.php [QSA,L]
RewriteRule ^(.*)index.html main.redirect.php [NC,QSA,L]
# 2014-07-16 RM: Check if the url contains upper-case characters
# RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1]
# RewriteRule ![A-Z] - [E=HASCAPS:FALSE,S=1]
# RewriteCond %{ENV:HASCAPS} TRUE
# RewriteRule ^(.*) main.redirect.php [QSA,L]
Qualquer ajuda é bem vinda!
Atenciosamente
René
EDITAR:
Eu limpei a parte do .htaccess para algumas linhas, mas mesmo neste caso apenas a verificação do www funciona conforme o esperado:
RewriteCond %{HTTP_HOST} ^mydomain\.com [NC,OR]
RewriteCond %{REQUEST_URI} ^(.*)/index\.html$ [NC,OR]
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule ^(.*) main.redirect.php [QSA,L]