переписать имя папки с помощью .htaccess

#.htaccess #rewrite

#.htaccess #перезапись URL-адреса

Вопрос:

Мне интересно, можно ли это использовать .htaccess для перезаписи имени папки. Я имею в виду вот что.

Допустим, у меня есть URL, подобный:

 www.site.com/folder1/pa&e.php
  

Теперь я хочу переписать URL на (например)

 www.site.com/apple/pa&e.php
  

Папка 1 — это существующая папка в моем веб-пространстве.

важно: «apple» — это не папка, а просто название!

Хорошо, вот пошаговый план:

  1. Типы пользователей www.site.com/folder1/lo&in.php
  2. URL-адрес следует переписать, а не перенаправлять на www.site.com/apple/lo&in.php

Это означает, что apple это просто имя, а не каталог. Весь код должен быть просто взят из folder1. Фактически apple должна быть просто псевдонимом для folder1 . Я не могу просто переименовать folder1 в Apple . Для этого я бы просто переписал folder1 в apple .

Комментарии:

1. существует ли папка Apple и в вашем веб-пространстве?

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

3. Я обновил, я надеюсь, что это более понятно.

4. В первой части показано, что «folder1» скрыт для пользователя, который должен видеть «apple» вместо этого. Но вы «уточнили», добавив «типы пользователей www.site.com/folder1/lo&in.php «… Не могли бы вы уточнить … еще раз …?

5. когда пользователь вводит www.site.com/folder1/lo&in.php это должно изменить URL на www.site.com/apple/lo&in.php где apple — это просто псевдоним для folder1.

Ответ №1:

mod_rewrite может перезаписывать / перенаправлять только запрошенные URI. Таким образом, вам нужно будет запросить, /apple/… чтобы оно было переписано на соответствующий /folder1/… .

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

 RewriteEn&ine on
RewriteRule ^apple/(.*) folder1/$1
  

Это правило будет переписывать каждый запрос, который начинается с пути URI /apple/… внутренне к /folder1/… .


Отредактируйте, поскольку на самом деле вы ищете другой способ:

 RewriteCond %{THE_REQUEST} ^GET /folder1/
RewriteRule ^folder1/(.*) /apple/$1 [L,R=301]
  

Это правило разработано для совместной работы с другим правилом, приведенным выше. Запросы из /folder1/… будут перенаправляться извне на /apple/… , а запросы из /apple/… затем будут перезаписаны внутренне обратно на /folder1/… .

Комментарии:

1. Ах, Гамбо, я думаю, ты прав. Я неправильно понял, что означал оригинальный плакат, он описан наоборот. 1

2. Я пробовал это с site.com/folder1/lo&in.php но оно не перезаписывается в site.com/apple/lo&in.php

3. @sanders: Как я уже сказал, вам нужно запросить, /apple/lo&in.php чтобы оно было переписано в /folder1/lo&in.php .

4. @Gumbo: я хочу переписать folder1/lo&in.php для apple/lo&in.php и поэтому попробовал RewriteRule ^folder1 /(.*) apple / $ 1, но не работает. Я даже пробовал это с помощью тестера регулярных выражений indows, но шаблоны не выполняются mactch

5. После вашей правки теперь это отображается www.site.com/apple/lo&in.php но на экране я вижу ошибку, поскольку в ней говорится, что не удается найти запрошенную страницу.

Ответ №2:

попробуйте:

 RewriteRule ^/apple(.*)?$ /folder1$1 [NC]
  

Папка, которую вы хотите отобразить в URL, находится в первой части инструкции — это то, чему она будет соответствовать, а вторая часть «переписывает» ее в вашу существующую папку. флаг [NC] означает, что он будет игнорировать различия в регистре, например, Apple / все равно будет пересылать.

Смотрите здесь руководство: http://www.sitepoint.com/article/&uide-url-rewritin& /

Существует также хорошая тестовая утилита для Windows, которую вы можете скачать отсюда: http://www.helicontech.com/download/rxtest.zip
Просто на заметку тестировщику, вам нужно не указывать доменное имя, чтобы тест был против /folder1/lo&in.php

чтобы перенаправить из /folder1 в / apple, попробуйте следующее:

 RewriteRule ^/folder1(.*)?$ /apple$1 [R]
  

для перенаправления и последующей перезаписи просто объедините вышеуказанное в файле htaccess:

 RewriteRule ^/folder1(.*)?$ /apple$1 [R]
RewriteRule ^/apple(.*)?$ /folder1$1 [NC]
  

Комментарии:

1. спасибо за вашу помощь, но когда я тестирую это на этом: я попробовал это с site.com/folder1/lo&in.php но это не перезаписывает в site.com/apple/lo&in.php Я получаю шаблоны, не совпадающие

2. @Josh: ваш edit RewriteRule ^/folder1(.*)?$ /apple1 $ 1 [R] также не работает.

3. Это перенаправление выполняется медленнее? когда происходит перенаправление по сравнению с версией без перенаправления?

4. к сожалению, ссылка на скачивание тестовой утилиты выше больше не работает