Как использовать apache mod_rewrite rewriterule без изменения относительных путей - PullRequest
4 голосов
/ 28 сентября 2008

В .htaccess есть следующее правило перезаписи:

RewriteRule ^groups/([^/\.]+)/?$  groupdetail.php?gname=$1 [L,NC]

Это занимает что-то вроде www.example.com/groups/groupname и вызывает www.example / groupdetail.php? Gname = groupname. И это работает просто отлично.

Но все относительные ссылки на groupdetail.php используют groups / в качестве относительного пути, и я не хочу их. Как мне избежать этого?

Например, когда пользователь нажимает на ссылку <a href="link.php"> на groupdetail.php? Gname = groupname, он попадает на www.example / groups / link.php. Я хочу взять пользователя на www.example.com/link.php.

Очевидно, я хочу, чтобы URL-адрес пользователя выглядел как «www.example.com/groups/groupname», поэтому я не хочу использовать [R] /redirect.

Ответы [ 6 ]

5 голосов
/ 16 октября 2008

Если, как и я, у вас есть сотни относительных ссылок на странице, вставьте <base href=""> в <head> с абсолютным путем (также можно использовать относительный). Вам также необходимо указать путь к файлам .js в абсолютном <head>, потому что IE и firefox по-разному работают с базовым href. Я согласен, что это раздражающая проблема.

3 голосов
/ 01 октября 2008

Относительные ссылки разрешаются браузером, а не сервером, поэтому вы ничего не можете сделать с mod_rewrite.

Либо используйте относительные ссылки для перехода вверх по иерархии (../link.php), либо используйте абсолютные ссылки.

2 голосов
/ 01 декабря 2011

Если вы не хотите иметь абсолютные ссылки или использовать <base>, потому что собираетесь перемещать страницу, вы можете создать базу с помощью php следующим образом:

echo '<base href="http://'.$_SERVER['SERVER_NAME'].str_replace("index.php","",$_SERVER['PHP_SELF']).'" />';
1 голос
/ 30 декабря 2009

Вы можете использовать тег BASE, если не хотите использовать абсолютные пути:

http://www.w3schools.com/tags/tag_base.asp

1 голос
/ 28 сентября 2008

Если вы измените правило перезаписи на принудительное перенаправление (добавьте параметр [R]), то браузер будет использовать URL-адрес /groupdetail.php, и относительные ссылки будут работать нормально. Однако это добавляет одно перенаправление и делает URL-адреса менее привлекательными.

RewriteRule ^groups/([^/.]+)/?$ groupdetail.php?gname=$1 [L,NC,R]
0 голосов
/ 04 марта 2009

Хоп ответ правильный. Браузер видит www.example.com/groups/groupname в качестве адреса, поэтому считает, что /groups является текущим каталогом. Таким образом, любые ссылки, такие как <a href=link.php>, должны находиться в папке /groups.

Когда пользователь наводит указатель мыши на ссылку, он видит www.example.com/groups/link.php в качестве адреса ссылки.

Решение состоит в том, чтобы использовать абсолютные ссылки - просто добавьте косую черту перед href:

<a href=/link.php>

Пользователь увидит www.example.com/link.php в качестве URL.

Тем не менее, из вашего вопроса видно, что вы используете относительные ссылки специально ... у вас есть причина не использовать абсолютные ссылки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...