ОБНОВЛЕНИЕ: в основном решено. Теперь это не работает, только если в ситуации, когда вы пытаетесь получить доступ http://www.example.com/any-real-file-without-an-extension/anything-afterwards-that-doesnt-end-in-a-slash
. Я думаю, сервер думает, что any-real-file-without-an-extension
может быть каталог ... не знаю, как это исправить.
PHP определяет PATH_INFO как часть URL-адреса, который:
Содержит любую предоставленную клиентом информацию о пути после фактического имени файла сценария, но предшествует строке запроса, если таковая имеется. Например, если доступ к текущему скрипту был осуществлен через URL
http://www.example.com/php/path_info.php/some/stuff?foo=bar
, затем$_SERVER['PATH_INFO']
будет содержать/some/stuff
.
На данный момент мой сайт обрабатывает http://example.com/ contact_us.php/ANYTEXTCANGOHERE
так как http://example.com/contact_us.php
В таком случае, /ANYTEXTCANGOHERE
это PATH_INFO. Я хотел бы сделать так, чтобы либо эта информация о пути удалялась до имени файла, либо в противном случае возвращалось 404. Как я могу это сделать?
Вот что мой .htaccess
похоже сейчас. Все очень просто. Просто 301 редирект на www и косые черты в конце, а также что-то, что заставляет связываться с файлами без расширений и перезаписывать без расширений. У меня нет корневого доступа к серверу.
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]
Чтобы отключить дополнительную информацию о пути, вам просто нужно отключить AcceptPathInfo
в конфигурации сервера (или .htaccess
файл). Например:
AcceptPathInfo Off
Любой URL-адрес, содержащий информацию о пути, теперь будет запускать 404.