"новый / файл. php" или просто "новый"?
просто "новый". Строка substitution заменяет URL-путь whole , если Pattern соответствует.
Чтобы получить результат new/file.php
, запросив /test/file.php
, вам понадобится немного другая директива. Например:
RewriteRule ^test/(.*) new/$1 [L]
ОБНОВЛЕНИЕ: Обратите внимание, что выше указано внутреннее переписывание (в отличие от внешнее перенаправление ). Перезапись является внутренней по отношению к серверу, пользователь не видит этого.
Также обратите внимание, что new/$1
- это относительный путь (в отличие от root -относительный - начиная с sla sh или абсолютный - со схемой + имя хоста).
Если файл .htaccess
находится в каталоге root, вам не нужно включать префикс sla sh (для внутреннее переписывание ), поскольку по умолчанию оно относится к каталогу, содержащему файл .htaccess
. (Добавлять его без вреда.) * Префикс каталога (абсолютный путь к файловой системе, в котором находится файл .htaccess
) добавляется в конце к относительным заменам пути. Таким образом, new/file.php
фактически становится /path/to/root-directory/new/file.php
(когда файл .htaccess
находится в /path/to/root-directory/.htaccess
).
Однако, если вы создаете внешнее перенаправление , вам потребуется префикс sla sh (чтобы сделать его root -относительным - относительно документа root) или установить директиву RewriteBase
(которая переопределяет префикс каталога ). В противном случае вы бы получили перенаправление на http://example.com/path/to/root-directory/new/file.php
, что, скорее всего, «неправильно».
Например:
RewriteRule ^test/(.*) /new/$1 [R,L]
Обратите внимание на флаг R
, который вызывает внешнее перенаправление обратно к клиенту.