Назад | Перейти на главную страницу

Предоставление одному подкаталогу нескольких имен через htaccess

Первичный сценарий (Требуется ответ)

Если мой сайт http://website.com имеет несколько подкаталогов:

/features/ . /articles/ . /projects/

Все они содержат любое количество файлов и папок;

Есть ли способ изменить имя ведущего каталога?

Например:

http://website.com/content/features/( ... )

Becomes

http://website.com/public/features/( ... )

AND

http://website.com/private/features/( ... )

-

Прежний сценарий ( На удерживании )

Допустим, у меня есть веб-сайт, размещенный на http://website.com.

И я хотел бы добавить несколько индивидуальных проектов в подраздел сайта, например /extra/.

Итак, допустим, у меня есть:

/extra/feature.php?subject=( a childrens cartoon )
/extra/article.php?subject=( fetish photography project )
/extra/ebook.php?subject=( local golfing borchure )

Есть ли способ применить псевдоним к extra каталог, чтобы он стал двумя или более другими именами? Например:

/extra/feature.php?subject=( a childrens cartoon )

Becomes

/public/feature.php?subject=( a childrens cartoon )

And

/private/feature.php?subject=( a childrens cartoon )

Я предполагаю, что это возможно с htaccess?

Решение Scenario 1 это просто 2 строки кода, помещенные в .HTACCESS файл в корневом каталоге http://website.com.

Код такой:

RewriteEngine on
RewriteRule ^(?:public|private)/(.*) extra/$1

Теперь в гостях http://website.com/extra/(directory), http://website.com/public/(directory), или http://website.com/private/(directory) все будут отображать одни и те же файлы назначения.

Любой другой /name/ приведет к error 404.

В .htaccess вы можете использовать mod_rewrite для внутренне переписать URL из /public/ к /extra/.

Например, чтобы перезаписать только URL-адреса формы .../feature.php?subject=<something> вы можете сделать что-то вроде следующего в .htaccess файл в корне документа:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^subject=[^&]+
RewriteRule ^(?:public|private)/(feature\.php)$ /extra/$1 [L]

Это соответствует URL-адресам формы /public/feature.php?subject=<something> или /private/feature.php?subject=<something> и переписывает запрос на /extra/feature.php?subject=<something>. Это внутренняя перезапись, URL в адресной строке не меняется.

В ?: в (?:public|private) делает подшаблон не захватывающим, так как нам это не нужно в замена строка (также известная как целевой URL).

(feature\.php) - Это подшаблон захвата, на который есть ссылка в замена используя $1 обратная ссылка. Это просто избавляет от набора текста (и от возможных ошибок). Однако вы также можете сгруппировать article.php и ebook.php вместе для обработки всех трех экземпляров с помощью одной директивы.

В RewriteCond директива необходима для соответствия строке запроса. В RewriteRule соответствует только URL-пути.

Строка запроса из запрошенного URL-адреса по умолчанию передается на целевой URL-адрес, поэтому вам не нужно ничего делать со строкой запроса.