Usando mod_rewrite para remover PATH_INFO da URL

1

ATUALIZAÇÃO: Principalmente resolvido. Agora só não funciona se na situação em que você está tentando acessar http://www.example.com/any-real-file-without-an-extension/anything-afterwards-that-doesnt-end-in-a-slash . Eu acho que o servidor acha que any-real-file-without-an-extension pode ser um diretório ... não sei como consertar isso.

O PHP define "PATH_INFO" como parte da URL que:

Contains any client-provided pathname information trailing the actual script filename but preceding the query string, if available. For instance, if the current script was accessed via the URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, then $_SERVER['PATH_INFO'] would contain /some/stuff.

A partir de agora, meu site trata http://example.com/ contact_us.php/ANYTEXTCANGOHERE como http://example.com/contact_us.php

Nesse caso, /ANYTEXTCANGOHERE é PATH_INFO. Eu gostaria de fazer com que ou esta informação de caminho seja deletada até o nome do arquivo, ou então um 404 é retornado. Existe alguma maneira que eu possa fazer isso?

Aqui está o meu .htaccess agora. É bem simples. Apenas um redirecionamento 301 para www e um stripslashes no final, bem como algo para forçar a associação a arquivos sem extensões e uma reescrita sem extensões. Eu não tenho acesso root do servidor.

ErrorDocument 404 /404.php
ErrorDocument 503 /503.php

#Force www:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^foodthing.org [NC]
RewriteRule ^(.*)$ http://www.foodthing.org/$1 [L,R=301,NC]

#get rid of trailing slashes
RewriteCond %{HTTP_HOST} ^(www.)?foodthing\.org$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

#1)externally redirect "/file.php" to "/file"   
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
#2)Internally map "/file" back to "/file.php"
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [NC,L]
    
por Ben Yep 23.08.2017 / 18:13

1 resposta

0

Para desabilitar informações adicionais sobre o caminho, você só precisa desabilitar AcceptPathInfo na configuração do servidor (ou .htaccess file). Por exemplo:

AcceptPathInfo Off

Qualquer URL que contenha informações de caminho agora acionará um 404.

    
por 23.08.2017 / 18:26