#.htaccess #rewrite
#.htaccess #перезапись URL-адреса
Вопрос:
Мне интересно, можно ли это использовать .htaccess
для перезаписи имени папки. Я имею в виду вот что.
Допустим, у меня есть URL, подобный:
www.site.com/folder1/pa&e.php
Теперь я хочу переписать URL на (например)
www.site.com/apple/pa&e.php
Папка 1 — это существующая папка в моем веб-пространстве.
важно: «apple» — это не папка, а просто название!
Хорошо, вот пошаговый план:
- Типы пользователей
www.site.com/folder1/lo&in.php
- 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. к сожалению, ссылка на скачивание тестовой утилиты выше больше не работает