Por que não consigo redirecionar o url com “index.html” para um arquivo php?

1

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]
    
por Spider IT 17.07.2014 / 11:19

1 resposta

0

Eu não testei isso, no entanto, a primeira coisa que vi foi que em suas linhas RewriteRule que são assim:

RewriteRule ^(.*) main.redirect.php [QSA,L]

Você deve tentar adicionar uma barra antes de main.redirect.php, já que essa parte da regra de redirecionamento deve ser uma URL, então ela se tornaria:

RewriteRule ^(.*) /main.redirect.php [QSA,L]
    
por 26.08.2014 / 16:30