Добрый вечер. Друзья, помогите решить задачу: хочу переделать урлы следующего типа:
http://site.com/user?id=1
на урлы такого типа:
http://site.com/user/1
В HTACESS прописал такое:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\?id
RewriteRule ^/?(.*)\?id$ /$1 [L,R=301]
Но не ничего не дает :( Помогите разобраться, заранее спасибо!
UP: Вот этим кодом
RewriteRule ^([a-zA-Z0-9-_]+)$ user.php?id=$1&%{QUERY_STRING} [NC,L]
Смог добиться того, что урл стал такого вида:
http://site.com/1
где "1" это id, которое успешно передается по $_GET['id'], но мне нужно сделать урл такой:
http://site.com/user/1
То есть дописать перед "1" еще user/ Помогите :)
Не дает потому что в документации по-английски написано:
...the Pattern is matched against only a partial path...
If you wish to match against the ... query string, use a RewriteCond with the ... %{QUERY_STRING} variables respectively
Перевожу на человеческий: Выражение сравнивается только с частью пути не затрагивая GET-параметры. Если вам очень нужно заменять именно вместе с параметрами запроса - придется использовать RewriteCond.
Однако в целом ваш случай пока не очень понимаю. Мне кажется что вы неправильно сформулировали для себя задачу.
На всякий случай могу предложить такое решение (ну вдруг и правда так надо)
RewriteCond ${QUERY_STRING} id=([^&]+)
RewriteRule ^user/?$ /user/%1
Эти строки будут искать запросы с GET-параметром id и переписывать их если
запрос совпадает с user
RewriteRule ^(.*)$ /user?id=$1 [L]
прописываем user.php чтоб переходил на /user/blabla
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^user$ /user/%1? [L]
надеюсь что помог
Редирект (с RewriteCond
знаком с чужих слов, так что с его синтаксисом мог накосячить, но за регулярки уверен):
RewriteCond ${QUERY_STRING} ^id=([1-9][0-9]*)(?:&([a-z\-_]+=[a-z0-9\-_]+))$
RewriteRule ^([a-z\-_]+)(?:\.php)$ $1/%1?%2 [L,NC,R=301]
RewriteCond ${QUERY_STRING} ^id=([1-9][0-9]*)$
RewriteRule ^([a-z\-_]+)(?:\.php)$ $1/%1 [L,NC,R=301]
RewriteRule ^([a-z\-_]+)(?:\.php)$ $1/ [L,NC,R=301]
Второй рерайт должен сработать, если иных параметров, кроме id
не передано, а третий просто заменяет адреса вида user.php
на user/
, если они введёны без параметров.
Рерайт (что делает). Добавил параметр rewritten=1
, чтобы запросы, посланные сервером, не попадали под редирект, иначе будет бесконечное перенаправление:
RewriteRule ^([a-z\-_]+)(?:(?:\/([1-9][0-9]*))?)$ $1.php?rewritten=1&id=$2&%{QUERY_STRING} [NC,L]
Виртуальный выделенный сервер (VDS) становится отличным выбором
ЗдравствуйтеНа сайте есть кнопка, при нажатии на которую генерируется хэш, который мне нужно получить