Во-первых, не забудьте поставить эту строку в вашем .htaccess
перед переписыванием:
RewriteEngine on
Если вы хотите, чтобы site.com/something
отображал site.com/something.php
, если он существует без изменения URL, сделайте следующее:
RewriteCond %{REQUEST_URI}.php -f
RewriteRule .* %{REQUEST_URI}.php
При этом будет отображаться [запрошенный вами файл] .php, если он существует, но при этом будет отображаться тот же URL-адрес, который вы ввели. Если php-файл не существует, он все равно даст вам 404, как и должно быть. (Вот для чего -f
.)
Нет способа полностью скрыть запросы GET. Вы можете избавиться от запросов GET, но тогда они не будут доступны для вашего скрипта, и в этом нет никакого смысла. Вы можете, однако, сделать его лучше. Например, если вы хотите, чтобы site.com/userpage/item/30
отображал содержимое site.com/userpage.php?item=30
, вы можете сделать что-то вроде этого:
RewriteRule ^/userpage/item/(.*)$ userpage.php?item=$1
Вы также можете заставить его работать с любым значением GET с помощью правила, подобного этому:
RewriteRule ^/userpage/(.*)/(.*)$ userpage.php?$1=$2
С этим эффектом вы можете получить доступ к site.com/userpage.php?query=yes
с помощью site.com/userpage/query/yes
. Это в значительной степени лучшее, что вы можете сделать; Значения GET должны как-то исходить из URL, поэтому, если вы хотите, чтобы ваши входные данные были полностью скрыты, вам придется вместо этого использовать POST.