2010-07-05 1 views
0

мне нужно иметь регулярное выражение, которое будет соответствовать URI, как это на основе поддомена «блог» -Помощь с Regex, чтобы соответствовать и переписать URI

http://blog.foo.com/2010/06/25/city-tax-sale/

и перенаправлять как это (избавившись от субдомна и номер/дата) -

http://foo.com/city-tax-sale/

где последний бит «города-налог-продажа» будет подстановочную. Таким образом, в основном любой входящий URI, начинающийся с 'blog.foo.com', будет перенаправлен на 'foo.com' + ', что находится в конце вышеуказанного URI после трех подпутей с цифрами.

Надеюсь, это имеет смысл. Просто пытаюсь создать одно перенаправление, а не писать все.

ответ

3

Это явно соответствует свой формат даты, а не какой-либо последовательности цифр и слэши:

RewriteCond %{HTTP_HOST} ^blog\.foo\.com$ [NC] 
RewriteRule ^/\d{4}/\d{2}/\d{2}/(.*)$ http://foo.com/$1 [L,R=301] 

Регулярное выражение часть может быть сломана делает до:

^  # start of non-domain url 
/\d{4} # slash followed by 4 digits 
/\d{2} # slash followed by 2 digits 
/\d{2} # slash followed by 2 digits 
/ # closing slash 
(.*) # rest of the url, captured to group 1 
$  # end of url 

С $1 в замене быть группой 1.

В опциях части:
L для «Last» - говорит его не беспокоить, глядя на другие правила.
R=301 для Перенаправление с 301 заголовка, что означает постоянное перенаправление (только R пошлет временный 302 заголовка)

RewriteCond бит выполняет без учета регистра (опция NC) проверить на заголовок HTTP_HOST (поставляется пользователем/клиент), и если он начинается blog.foo.com, он выполняет переписывание, иначе это не так.

+0

* «Итак, в основном ** любой входящий URI, который начинается с« blog.foo.com »**, будет перенаправлен на« foo.com »* – galambalazs

+0

А, пропустил //blog.foo.com -> // foo. com часть. –

+0

Хорошо, исправлено это сейчас. Кроме того, поскольку RewriteCond является регулярным выражением, я избежал '.' И добавил конечный маркер - все равно работает без, но meh. –

0

Вы можете попробовать это:

/http:\/\/blog\..*\.[a-zA-Z]{2,5}\/[0-9]{4}\/[0-9]{2}\/[0-9]{2}\/(.*)\// 
+1

это будет переписываться не перенаправлять. – galambalazs

2
RewriteCond %{HTTP_HOST} ^blog.foo.com [NC] 
RewriteRule ^(\d+/)+(.*)/?$ http://foo.com/$2 [L,R=301] 
Смежные вопросы