Я занимался этим весь день и думал, что разбираюсь в регулярных выражениях, но больше не уверен в этом. Я искал повсюду, прочитал несколько ужасных руководств по mod_rewrite, и я в тупике.
Я хочу сделать так, чтобы звонок
subdomain.domain.com/u/satbirkira
выглядит точно так же, как указано выше, но вместо этого выполняет и отображает это
domain.com/user.php?user_name=satbirkira?subdomain_given=subdomain
Это должно быть очень просто, но я не могу этого понять. Вот что я придумал:
RewriteCond %{HTTP_HOST} ^(.*)user.php\?user_name=(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI}/u/$3
Я понятия не имею, почему некоторые RewriteCond ломаются, если вы удаляете бесполезные точки захвата, такие как первая (. *), Но я научился просто кататься с ней. Я был бы признателен, если бы кто-нибудь объяснил, почему подход неправильный, синтаксис, точки захвата и замена, а также переменные.
редактировать
Это похоже на гол на # 4 на http://roshanbh.com.np/2008/03/url-rewriting-examples-htaccess.html, "4) Переписывая yoursite.com/user.php?username=xyz на yoursite.com/xyz" ожидаю, что ответ не имеет для меня смысла.
Это должно работать:
RewriteCond %{HTTP_HOST} (.*).domain.com
RewriteRule ^/u/([^/]+)/?$ /user.php?user_name=$1&domain_given=%1 [P]
Вспомните, как сначала проверяется LHS RewriteRule. Затем в RewriteCond LHS сопоставляется с RHS, и, если это совпадает, выполняется подстановка. Строки, которые вы захватываете в правой части RewriteCond, сохраняются в% 1,% 2 и т. Д. Те, которые вы захватываете в левой части RewriteRule в $ +, ä2 и т. Д.
В ?user_name=satbirkira
Часть может быть немного сложной для подачи в PHP с перезаписью, в зависимости от того, как PHP обращается к данным - некоторые приложения в конечном итоге получают исходную строку запроса, а не перезаписанную.
Но пока давайте начнем с этого и посмотрим, к чему это приведет. Это должно быть в VirtualHost
контекст, если это в <Directory>
или .htaccess
его нужно будет настроить ..
RewriteRule ^/u/([^/]+)/?$ /user.php?user_name=$1 [L]
Для .htaccess
(которые вы не должны использовать!):
RewriteRule ^u/([^/]+)/?$ user.php?user_name=$1 [L]