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]