Простая проблема mod_rewrite - PullRequest
0 голосов
/ 25 июня 2009

Я новичок в использовании mod_rewrite и пытаюсь переписать страницы на базовом уровне моего сайта:

www.site.com

Я хочу переписать любой из следующих URL-адресов www.site.com/main www.site.com/settings www.site.com/username

Кому: www.site.com/index.php?v=main www.site.com/index.php?v=settings www.site.com/index.php?v=username

У меня это работало, когда я настроил mod_rewrite по адресу www.site.com/directory/, но не могу понять, как заставить его работать с www.site.com

RewriteEngine On
RewriteRule ^/([^/\.]+)/?$ index.php?v=$1 [L]

Ответы [ 3 ]

1 голос
/ 25 июня 2009

Правильное правило будет ...

RewriteRule ^([^/\.]+)/?$ index.php?v=$1 [L,NC,QSA]

Но вы можете столкнуться с некоторыми проблемами - например, если у вас есть РЕАЛЬНЫЕ каталоги - это тоже перезапишет их и не позволит вам их использовать. У вас есть два варианта, чтобы избежать проблемы, вы можете написать множество правил, например:

RewriteRule ^Directory/?$ index.php?v=directory [L,NC,QSA]

Или вы можете использовать «каталог для притворства», как этот ...

RewriteRule ^Content/([^/\.]+)/?$ index.php?v=$1 [L,NC,QSA]

Во втором примере ваш URL будет www.site.com/Content/Directory/

Я добавил NC и QSA в свои атрибуты - без учета регистра и строки запроса. Вы обязательно должны использовать NC, а QSA полезен в некоторых реализациях.

1 голос
/ 25 июня 2009

Я бы остановился на том, должен ли путь быть /settings или /settings/ (в настоящее время вы соответствуете обоим) и т. Д. (Лично я предпочитаю /settings.) Я считаю, что это хорошая идея, чтобы сделать пути как не - как можно более неоднозначно. Если бы вы соответствовали путям типа /settings, вы бы сделали так:

RewriteEngine On
RewriteRule ^(\w+)$ index.php?v=$1 [L]

Также обратите внимание на флаг QSA, если вы хотите поддерживать дополнительные параметры запроса (например, от /settings?tab=password до index.php?v=settings&tab=password.) Я упоминаю об этом, потому что это то, что беспокоило меня в начале.

0 голосов
/ 25 июня 2009

У вас есть дополнительные "/" там. Это должно быть:

RewriteEngine On
RewriteRule ^([^/\.]+)/?$ index.php?v=$1 [L]
...