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

Что не так с этим правилом перезаписи URL-адресов apache?

Я хочу перенаправить 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>