Первичный сценарий (Требуется ответ)
Если мой сайт 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-адрес, поэтому вам не нужно ничего делать со строкой запроса.