Redirecionamento Apache para /index.php - Como lidar com solicitações diretas para /index.php

1

Eu não tenho 100% de certeza se isso deve estar em falha do servidor ou estouro de pilha, embora eu esteja inclinado a falha do servidor.

A maioria das estruturas PHP utiliza redirecionamentos do Apache para canalizar toda a solicitação para /index.php e, em seguida, a estrutura lida com o roteamento a partir de lá. O problema que estou tendo é que nosso site antigo não usou essa metodologia e /index.php realmente era nossa página inicial. Agora que lançamos um novo site, queremos redirecionar todas as solicitações diretas para /index.php to /home .

Eu sinto que me lembro de haver um switch ou algo no Apache que só executa um redirecionamento se a solicitação atual não for o resultado de outro redirecionamento 301. Eu não consigo encontrar nada parecido com isso. Eu estou inventando isso? Se eu sou, existe alguma maneira de lidar com essa situação?

Eu removi meu arquivo de configuração do Apache para o mínimo absoluto para eliminar a possibilidade de redirecionamentos desconhecidos. Aqui está (embora o nome do domínio tenha sido redigido):

##
# Some LoadModule includes
##

## Set the IP and ports for this server
Listen 10.0.15.246:80

## zend fastcgi
AddType application/x-httpd-php .php
AddHandler fastcgi-script .php

<VirtualHost *:80>

    ## Set various vhost values
    ServerName www.example.com
    DocumentRoot /www/www.example.com/htdocs/public
    DirectoryIndex index.php

    ##Set development environment
    SetEnv WEB_ROOT /www/www.example.com/htdocs/public
    SetEnv APPLICATION_ENV development

    RewriteEngine On

    ## My attempts to redirect /index.php to either / or /home
    #RewriteRule /index.php$ /home [R=301,NC,L]
    #RewriteRule /index.php$ / [R=301,NC,L]

    <Directory /www/www.example.com/htdocs/public>
        DirectoryIndex index.php
        AllowOverride All
        Order allow,deny
        Allow from all

    </Directory>

</VirtualHost>

Eu tenho um arquivo .htaccess localizado em /htdocs/.htaccess , que está completamente em branco.
Eu também tenho um arquivo .htaccess localizado em /htdocs/public/.htaccess , que contém o seguinte e nada mais:

RewriteEngine On
# The following rule tells Apache that if the requested filename
# exists, simply serve it.
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
# The following rewrites all other queries to index.php. The
# condition ensures that if you are using Apache aliases to do
# mass virtual hosting, the base path will be prepended to
# allow proper resolution of the index.php file; it will work
# in non-aliased environments as well, providing a safe, one-size
# fits all solution.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]

O que está acontecendo no momento:

  • Quando um usuário navega para o link , ele é recebendo um erro 404.
  • Quando um usuário navega para o link ou mesmo link eles acabam na minha página inicial.
  • Quando um usuário navega para http://www.example.com/<anything else> , ele acaba na minha home page (ao usar o redirecionamento para / ) ou em um loop de redirecionamento infinito (ao usar o redirecionamento para /home ).

O que eu quero mudar é:

  • Quando um usuário acessa o link , ele acaba na minha página inicial.

  • Quando um usuário navega para http://www.example.com/<anything else> , vai para a página apropriada (ou um erro 404, se não existir).

por d.lanza38 08.08.2018 / 17:51

1 resposta

0

Não consegui encontrar um flag / switch no Apache que impedisse um redirecionamento em uma solicitação existente que foi redirecionada anteriormente.

Em vez disso, procurei implementar uma solução no próprio aplicativo.

Por exemplo, como meu aplicativo era um aplicativo do Zend Framework 2, minha solução estava adicionando isso ao arquivo /htdocs/public/index.php:

if(trim($_SERVER['REQUEST_URI']) === '/index.php'){
    header("Location: /home",TRUE,301);
    die();
}

Não é a solução mais limpa. Mas eu só incluo as partes do ZF2 que eu preciso ao invés do pacote inteiro, então eu não tenho que me preocupar com o arquivo sendo sobrescrito devido a uma atualização.

    
por 08.08.2018 / 20:20