база перезаписи mod_rewrite - PullRequest
       6

база перезаписи mod_rewrite

1 голос
/ 02 декабря 2011

Я работаю на веб-сайте, где я хотел бы использовать mod_rewrite для перезаписи URL-адресов, таких как

www.example.com / index.php? P = MYPAGE -> www.example.com/MYPAGE www.example.com/index.php?p=user?u=MYUSER -> www.example.com/user/MYUSER www.example.com/index.php?p=group?g=MYGROUP -> www.example.com/group/MYGROUP

Я уже добавил эти правила.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?p=$1
RewriteRule ^user/(.+)$ index.php?p=user&u=$1

, но я столкнулся с проблемой.если я захожу на www.example.com/single-page, то все в порядке.Тогда, если я зайду на www.example.com/user/SMTHING, я не достигну того, чего хочу.Я пытался использовать флаги C и L, но безуспешно.

Есть идеи?

Спасибо

Ответы [ 4 ]

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

Нет ответа может выглядеть как мой, так что вот оно:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user/([a-zA-Z0-9-]+)$ /index.php?p=user&u=$1 [QSA,L]
RewriteRule ^group/([a-zA-Z0-9-]+)$ /index.php?p=group&g=$1 [QSA,L]
RewriteRule ^([a-zA-Z0-9-]+)$ /index.php?p=$1 [QSA,L]

Я почти уверен, что это работает (или очень близко к тому, что вы хотите). Пожалуйста, скажите мне, если это работает ...

Кстати, как насчет чего-то более приятного:

RewriteRule ^(user|group)/([a-zA-Z0-9-]+)$ /index.php?type=$1&val=$2 [QSA,L]

так что в вашем GET вы будете иметь «type = user» или «type = group» и «val = значение». Вид обобщающих вещей.

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

У вас есть три вопроса.Во-первых, ваши условия применяются только к первому правилу, которое следует за ними, поэтому вы все равно будете переписывать допустимые запросы файлов.Кроме того, вам нужно использовать флаг [L] ast, а также изменить порядок ваших правил следующим образом.Собираем все вместе:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)$ $1                               [L]

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)$ $1                               [L]

RewriteRule ^user/(.+)$ index.php?p=user&u=$1       [L]
RewriteRule ^(.+)$ index.php?p=$1
0 голосов
/ 02 декабря 2011

попробуйте это, это будет работать:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^\/]+)$ index.php?p=$1
RewriteRule ^([^\/])([^\/]+)\/([^\.]+)$ index.php?p=$1$2&$1=$3
0 голосов
/ 02 декабря 2011

ты попробуешь это это может быть полезно.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user/(.+)$ index.php?p=user&u=$1
RewriteRule ^(.+)$ index.php?p=$1

Порядок правил перезаписи очень важен.

...