2014-11-26 4 views
1

Я хотел бы иметь возможность удалить часть URL-адреса, если она дублируется непосредственно после себя.RegEx in .htaccess удалить дублируемую часть URL-адреса

К примеру у меня есть следующие ссылки:

http://www.example.com/foo-bar/ 
http://www.example.com/foo-bar/foo-bar-1/ 
http://www.example.com/foo-bar/foo-bar-2/0000-0000/ 
http://www.example.com/foo-bar/foo-bar-bar/foo/ 
http://www.example.com/foo-bar/foo-bar-foo/foo/bar/ 
http://www.example.com/foo-bar/foo-bar-foobar/foo/0000-0000/bar/ 

Я хотел бы, чтобы удалить первый «Foo-бар» из URL, только если «Foo-бар» появится в следующей части URL. Так что я бы в конечном итоге с этим адресам:

http://www.example.com/foo-bar/ 
http://www.example.com/foo-bar-1/ 
http://www.example.com/foo-bar-2/0000-0000/ 
http://www.example.com/foo-bar-bar/foo/ 
http://www.example.com/foo-bar-foo/foo/bar/ 
http://www.example.com/foo-bar-foobar/foo/0000-0000/bar/ 

Я использовал RegExr, чтобы проверить следующее регулярное выражение:

([a-zA-Z]+[^/]*)\W+\1- 

Это выбирает все, кроме первого URL, поскольку он не имеет дублирования «foo- бар".

Затем я положил, что в RewriteCond и RewriteRule:

RewriteCond %{REQUEST_URI} ([a-zA-Z]+[^/]*)\W+\1- 
RewriteRule [a-zA-Z]+[^/]* http://%{HTTP_HOST}/$1 [L,R=301] 

и протестировали его с помощью 'HTAccess тестера' по следующему адресу:

http://www.example.com/foo-bar/foo-bar-foobar/foo/0000-0000/bar/ 

который получил переписан:

http://www.example.com/foo-bar-foobar/foo/0000-0000/bar/ 

Но когда я помещаю этот код в свой .htaccess файл и просматриваю URL-адрес, он фактически перенаправляет:

http://www.example.com/ 

Затем я вернулся и посмотрел на RewriteRule и RegEx я использовал:

[a-zA-Z]+[^/]* 

Когда я побежал это через RegExr я понял, что это был выбор намного больше, чем просто первый «обув -бар".

Я считаю, что это то место, где я застреваю, поскольку я не могу определить RegEx, который выбирает только первый «foo-bar». Я попытался найти решение, я попытался адаптировать некоторые из ответа люди дали на следующие вопросы, но безрезультатно:

RewriteCond RewriteRule for .htaccess based on URL to a new page, regular expression

Regex to find text between second and third slashes

Я надеюсь, что я объяснил себя достаточно хорошо. Любые вопросы, пожалуйста, спрашивайте.

Заранее спасибо,
Chris.

ответ

0

Вы можете использовать это правило на основе опережения в корневом .htaccess:

RewriteEngine On 

RewriteRule ^([^/]+)/((?=.*?\1).+)$ /$2 [L,R=302,NE] 
Смежные вопросы