Apache / Linux - .htaccess, как получить конкретную переменную из запроса / url и применить для перезаписи - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть правило, которое работает для одного «направления», но не для другого.

Типичный входящий URL / запрос: (длинный URL)

http://somedomain.com/getme.pl?dothis=display&partnum=1234567 (может быть до 9 цифр)

У меня есть это правило в моем файле htaccess:

RewriteRule ^([0-9]*)$ /getme.pl?dothis=display&partnum=$1 [L]

Который отлично подходит для небольшого удобства получения одного из уникальных номеров деталей:

http://somedomain.com/1234567.

Тем не менее, я хотел бы сделать длинный URL-адрес "красивым", поэтому я решил, что могу изменить (ish) его.

Таким образом, при нажатии на ссылку на сайте (длинный URL-адрес) файл htaccess обрабатывает длинный URL-адрес до улучшенной версии.

Я пробовал МНОГИЕ попытки. Здесь был мой последний сбой.

RewriteRule ^([0-9]*)$ /getme.pl?dothis=display&partnum=$1 [L] #(works)
RewriteCond %{QUERY_STRING} ^partnum=([0-9]*) #(tried to get partnum)
RewriteRule ^.* http://%{HTTP_HOST}/%1 [R] #(make the short url)
RewriteRule ^([0-9]*)$ /getme.pl?dothis=display&partnum=$1 [L] #(the known working rule)

Я испробовал множество правил и посетил множество сайтов для совета. Я пробовал только с правилами, только с условиями и вариациями query_string.

Итак, я считаю, что мне нужно просто извлечь "partnum" из запроса и переписать в / 1234567 или http_host / 1234567

Затем разрешите обработку другому правилу (работам).

Итак, ОБА:

http://somedomain.com/getme.pl?dothis=display&partnum=1234567

и

http://somedomain.com/1234567

Отображать как: http://somedomain.com/1234567 в браузере.

и оба правильно передали весь запрос скрипту getme.pl.

Я нашел здесь несколько близких ответов, но ни один из них не объяснил, что мне действительно нужно.

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

1 Ответ

0 голосов
/ 22 апреля 2011

По звукам, это должно заставить вас двигаться по правильному пути:

# Your working rewrite, with extra param on the rewrite
RewriteRule ^([0-9]*)$ /getme.pl?dothis=display&partnum=$1&rewrite [L]

# Redirect for long urls, to pretty url
# -The appended '&rewrite' on the first rule will force this not to match
# -The trailing '?' on the rewrite will strip the query string
RewriteCond %{QUERY_STRING} partnum=([0-9]*)$
RewriteRule (.*) /%1? [L,R=301]

Надеюсь, это поможет.

...