Перезапись URL с использованием mod_rewrite в .htaccess

Я пытаюсь переписать URL-адрес с помощью модуля apache mod_rewrite. Я пытаюсь использовать его, как показано ниже:

Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^wants/testing.htm wants.php?wantid=$1 [L]

Я создал файл .htaccess в каталоге, откуда осуществляется доступ к файлам.

Также включен mod_rewrite. Со всем этим я все еще не смог заставить его работать.

Может кто-нибудь, пожалуйста, помогите мне с этим? Пожалуйста, дайте мне знать, если я что-то упустил

Заранее спасибо, Гнанеш


person gnanesh    schedule 20.05.2009    source источник
comment
Что именно у вас не работает? Как вы ожидаете, что URL-адрес будет переписан, и откуда вы хотите извлечь параметр wantid?   -  person duckyflip    schedule 20.05.2009
comment
URL-адрес показывает mydomain.com/wants.php?wantid=123. Мне нужно, чтобы он выглядел как mydomain.com/wants/123.   -  person gnanesh    schedule 20.05.2009
comment
$1 — это ссылка на параметр $_GET, требуемый в URL-адресе. Пожалуйста, дайте мне знать, если я недостаточно ясен. Я новичок в перезаписи URL   -  person gnanesh    schedule 20.05.2009


Ответы (4)


Согласно комментарию ОП:

URL-адрес показывает mydomain.com/wants.php?wantid=123. Мне нужно, чтобы он выглядел как mydomain.com/wants/123.

Это должно работать для вашего случая:

RewriteEngine on
RewriteBase /
RewriteRule ^wants/([0-9]+)$ /wants.php?wantid=$1 [L]

Это позволит вам использовать http://yoursite.com/wants/123 и автоматически перепишет его на wants.php?wantid=123.

person duckyflip    schedule 20.05.2009

Я думаю, что ведущая косая черта (или, скорее, ее отсутствие) может быть вашей проблемой:

Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^wants/testing.htm /wants.php?wantid=$1 [L]

В противном случае Apache может искать файл PHP в /wants/wants.php, поскольку он будет рассматривать его как относительный URL-адрес.

person cletus    schedule 20.05.2009
comment
^/хочет/testing.htm /хочет.php?wantid=$1 [L] - person SpliFF; 20.05.2009
comment
@SpliFF нет, это для файлов .conf, а не .htaccess - person Greg; 20.05.2009

Хм, поэтому я немного подумал, и я думаю, вы могли бы сделать что-то вроде этого (только изменил регулярное выражение в соответствии с вашим комментарием, если я правильно понял):

Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^wants/\d+$ /wants.php?wantid=$1 [L]

Но я думаю, вы также можете пропустить ссылку $1 и по-прежнему иметь доступ к идентификатору в вашем wants.php. Так

RewriteRule ^wants/\d+$ /wants.php [L]

тоже должно работать, и вы можете использовать что-то вроде

<?php 
    $request = split('/', $_SERVER["REQUEST_URI"])[1];
?>

в вашем wants.php, где последним элементом массива будет ваш идентификатор (или что-то еще, что вы когда-либо решите переписать и отправить в скрипт).

person Paul    schedule 20.05.2009

Если вы хотите использовать правило в файле .htaccess в вашем каталоге wants, вы должны удалить контекстный wants/ из начала шаблона. Так что просто:

RewriteEngine on
RewriteRule ^([0-9]+)$ /wants.php?wantid=$1 [L]

В противном случае, если вы хотите использовать правило в файле .htaccess в корневом каталоге:

RewriteEngine on
RewriteRule ^wants/([0-9]+)$ wants.php?wantid=$1 [L]
person Gumbo    schedule 20.05.2009