Давайте сначала посмотрим на ваши изменения:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ home.php?p=$1 [L,NS]
Это относительно перезапись: текст замены home.php...
не начинается с косой черты. Относительные перезаписи в контексте каталога (<Directory>
или .htaccess
) требуют настройки директивы RewriteBase
, в противном случае они делают неправильные действия.
Во-вторых, ваше правило обратное. Если вы хотите перезаписать URL home.php
на site/index
, вы должны поставить соответствие home.php
слева и site/index
справа:
RewriteRule ^home.php?p=(.*) /site/$1
Обратите внимание, что у меня есть абсолютное переписывание. Это означает, что mod_rewrite создаст URL из перезаписи, прикрепив к нему http://example.com
. Новый запрос теперь генерируется для http://example.com/site/<whatever>
. Мы можем уйти, не используя RewriteBase
, поскольку у нас нет относительных переписываний.
Что касается вашего последнего вопроса, неясно, почему при доступе к localhost/site/home.php?p=profile.user
вас переводят на localhost/profile.user
. Я подозреваю, что это ваш home.php
скрипт делает это, возможно. Вы пытаетесь использовать mod_rewrite
, чтобы перехватить этот конкретный вид PHP-запроса и отправить его в другое место, верно?