Перенаправить 301 из каталога в один файл - PullRequest
5 голосов
/ 16 октября 2011

У меня возникли проблемы с поиском чего-то простого.Я хочу, чтобы 301 перенаправил все в каталоге в один отдельный файл в новом месте.

В моем .htaccess я уже пробовал следующее ...

Redirect 301 /myDir/ http://www.mydomain.com/myNewDir/index.html

иэто ...

Redirect 301 /myDir/ http://www.mydomain.com/myNewDir/

и это ...

Redirect 301 /myDir http://www.mydomain.com/myNewDir

Проблема заключается в том, что каждый из них просто отображает каждый файл в /myDir/,и добавив его в конец целевого URL.

После поиска в Google я увидел кое-что, что говорило сделать это ...

Redirect 301 ^/myDir(.*) http://www.mydomain.com/myNewDir

Но это просто делает то же самое ...это сопоставление существующего местоположения файла с концом URL.

Было легко найти множество ". htaccess redirect" обучающих программ онлайн, но они, кажется, показывают только очевидные примеры, такие как 'oneсопоставление файлов «один к одному» или «сопоставление каталогов один к одному».Эти учебные пособия, похоже, также пренебрегают объяснением различных соответствующих файловых директив и способами их правильного использования.

Эта конкретная учетная запись хостинга является мусорной, и на ней также установлены расширения FrontPage.Перезапись мода завершается неудачно (ломает весь сайт), но строки Redirect 301 работают нормально.Поэтому, пока я не смогу переместить этот новый (не FrontPage) сайт на более надежную учетную запись хостинга, мне нужно будет придерживаться Redirect 301 однострочной.


Как я могу просто использоватьRedirect 301 для перенаправления всего в пределах /myDir/ в тот же единственный файл , расположенный в /myNewDir/index.html?(Я бы предпочел использовать /myNewDir/, если это возможно). Пожалуйста, объясните подробно, директивы файла, используемые в вашем решении.


ОБНОВЛЕНИЕ:

Ранее принятый ответ не работает.

Пример:

RedirectMatch 301 /myDir1/(.*) http://mydomain.org/newpath/myDir1/index.html

... выдает «Слишком много перенаправлений при попытке открыть» ошибка.

Это потому, что /myDir1/(.*) соответствует в любом месте в строке, поэтому, если целевой URL содержит /myDir1/ где-нибудь, а не только корень, он будет перенаправлен в неприятный цикл.

См. Мой собственный опубликованный ответдля правильного решения.

Ответы [ 2 ]

12 голосов
/ 16 октября 2011

Я нашел ответ в одном из моих старых проектов.

Redirect 301 все не так для этого. Я действительно хотел RedirectMatch 301 вместо.

RedirectMatch 301 ^/myDir/(.*) http://www.example.com/myNewDir/

Объяснение (ы):

http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch

"Эта директива эквивалентна Redirect, но использует стандарт регулярные выражения вместо простого сопоставления префиксов. "

http://www.zytrax.com/tech/web/regex.htm

"* Внешние квадратные скобки ^ (круговая или каретка) означают, что они смотрят только на начало целевой строки, например, ^Win не найдет Windows в STRING1, но ^Moz найдет Mozilla. "

и ...

". (точка) означает любой символ (ы) в этой позиции, например, ton. найдет tons, tone и tonneau, но не wanton, потому что не имеет следующий символ. "

и ...

* (звездочка или звезда) соответствует предыдущему символу 0 или более например, tre* найдет tree (2 раза) и tread (1 раз) и trough (0 раз).

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

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

RedirectMatch 301 /myDir/.* http://www.mydomain.com/myNewDir/index.html

Ссылка: http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch.

Что касается скобок. * RedirectMatch использует стандартные регулярные выражения, что означает, что вы можете захватывать совпадающие символыи используйте их в своем правиле перенаправления, ссылаясь на них как $ 1, $ 2 и т. д.

В регулярных выражениях * означает любое количество повторений предыдущего символа.,- обозначает любой символ.Таким образом, комбинация. * Говорит, что этот шаблон соответствует любому числу любого символа.Отсюда *.* означает, что этот шаблон будет соответствовать / myDir и / myDir /, и все же /myDir/test.html.Так * .* также может быть использован

...