Я хочу перенаправить http://abc.xyz.ac.uk/folders/abc/lmn http://abc.xyz.ac.uk/folders/abc/lmn.html
Вот код, в котором я включаю это
<Directory /var/www/folders>
RewriteEngine on
RewriteRule ^/abc/lmn$ ^/abc/lmn.html [NC,L]
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Что не так с этим правилом и правильное ли это место для включения перезаписи?
Спасибо
Пути перезаписи работают по-другому внутри <Directory >
контекст. Соответствующий путь - это полный путь файловой системы с удаленным текущим каталогом (включая косую черту в конце).
Результатом этого является то, что вам нужно удалить начальную косую черту из вашего регулярного выражения и заменить или переместить правило перезаписи за пределы контекста каталога, где оно будет соответствовать URI вместо пути файловой системы.
Обратите внимание, что .htaccess
файл неявно находится в контексте каталога, потому что он находится в каталоге.
У вас также не должно быть каретки в замене. Второй аргумент не является регулярным выражением.
Вы упомянули перенаправить в вашем вопросе. Чтобы это произошло, вам нужно [R]
или один из более конкретных кодов ([R=301]
или [R=303]
) после второго аргумента.
Попробуйте вместо этого:
RewriteRule ^/abc/lmn$ /abc/lmn.html [NC,L]
Согласно https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule, аргументы RewriteRule
- это шаблон, подстановка и некоторые флаги. В ^
символ будет рассматриваться как литерал в части замены, что, вероятно, не то, что вам нужно.
mod_rewrite
имеет отличное ведение журнала, которое может быть полезно для отладки такого рода проблем. Включите его с помощью LogLevel alert rewrite:trace3
, и настроить уровень в любом месте до trace8
чтобы получить необходимый уровень детализации. Подробнее о регистрации здесь:
https://httpd.apache.org/docs/current/mod/mod_rewrite.html#logging
Попробуйте следующее:
<Directory /var/www/folders>
RewriteEngine on
RewriteBase /folders
RewriteRule ^/abc/lmn$ /abc/lmn.html [NC,L]
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>