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).