.htaccess regex, перенаправить в новые папки - PullRequest
0 голосов
/ 20 октября 2011

Я пытаюсь перенаправить некоторые старые файлы / папки, которые следовали этому шаблону:

имя_папки / filename.extension

foldername имеет: (2010 или 2011) (текст A-Z a-z 0-9 _ или -)

имя файла имеет: (текст A-Z a-z 0-9 _ или -). расширение

Пример: 2011aug_SomeNameHere / image.jpg

Новое дерево папок упорядочивает файлы по годам (так что все на один уровень глубже): 2010 / имя_папки / filename.extension а также 2011 / имя_папки / filename.extension

Например: 2011 / 2011aug_SomeNameHere / image.jpg

И у меня есть следующее для моей переписки:

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /

    RewriteRule ^http://(www\.)?domain.com/path/to/+(2010|2011)+([A-Za-z\_\-])+/([A-Za-z0-9\_\-]\.([A-Za-z]))$ http://domain.com/path/to/$1/$1$2/$3 [L,R=301]

</IfModule>

В Firefox я получаю перенаправление на: domain.com/path/to/2011aug_SomeNameHere/image.jpg/2011aug_SomeNameHere/image.jpg/2011aug_SomeNameHere/image.jpg...

В Chrome я получаю ошибку 404 с URL-адресом: domain.com/path/to/2011aug_SomeNameHere/image.jpg

У кого-нибудь есть идеи / советы?

1 Ответ

1 голос
/ 20 октября 2011

Попробуйте это:

RewriteRule ^path/to/(2010|2011)([A-Za-z\_\-]+)/([A-Za-z0-9\_\-]+\.[A-Za-z]+)$ /path/to/$1/$1$2/$3 [L,R=301]

Нет необходимости использовать домен при перезаписи, если вы не обрабатываете несколько доменов с одной перезаписью. Ваша первая группа с $ 1 была бы вашей (www.), Если бы вы перешли на свой домен с www infront. Я предлагаю вам посмотреть, как вы используете + и группы, чтобы понять больше регулярных выражений. Наличие ваших + вне групп позволяет сопоставлять одну и ту же группу более одного раза. В вашем случае вы хотите сопоставить все это в одной группе. У вас также была вложенная группа для совпадения расширений файлов, где она не нужна.

...