мод переписать с точками - PullRequest
0 голосов
/ 20 февраля 2012

Я хочу изменить URL, например: localhost/site/home.php?p=index на localhost/site/index

я использую этот код в моем файле htaccess

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/?$ home.php?p=$1 [L,NS] 

но когда я пишу как localhost/site/home.php?p=profile.user, я получаю ошибку 404 и перехожу по этой ссылке

локальный / profile.user

как я могу это исправить?

спасибо

Ответы [ 2 ]

0 голосов
/ 12 марта 2012

Что вы имели в виду, вероятно: вы хотите переписать так:

http://mysite.com/index => http://mysite.com/home.php?p=index

Так что это должно работать

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?$ /home.php?p=$1 [QSA,L] 

Теперь, если вы хотите противоположное:

http://mysite.com/home.php?p=index => http://mysite.com/index

Это должно работать:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule /home\.php$ / [QSA,L] 
0 голосов
/ 12 марта 2012

Давайте сначала посмотрим на ваши изменения:

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-запроса и отправить его в другое место, верно?

...