Как заставить example.com/about показывать example.com/about.html? (Apache2)

Как заставить example.com/about показывать example.com/about.html? (Apache2)

Какой лучший вариант выбрать, пытаясь заставить example.com/about показать example.com/about.html, и не меняя URL на /about.html. Прямо сейчас я пытаюсь сделать следующий код, он просто возвращает ошибку 404.

RewriteRule ^/about$ https://example.com/about.html [R=301,L]

Изменить #1 наw3dkВ настоящее время у меня включен multiviews, но я все еще получаю ошибку 404. Вот мои текущие настройки в VirtualHost

<Directory /var/www/public_html>
    Options All +MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

решение1

Вместо использования mod_rewrite длявнутренне переписатьзапроса, вы могли бы просто использовать MultiViews (mod_negotiation) вместо этого:

Options +MultiViews

mod_rewrite позволяет выполнять более сложную перезапись URL-адресов, однако, если все, что вам нужно сделать, это удалить расширение файла, то MultiViews будет достаточно — именно для этого он и предназначен.

При выполнении запроса /about(URL/файла без расширения в допустимом каталоге) при включенном MultiViews mod_negotiation выполнит поиск файла, соответствующего ожидаемому MIME-типу, и вернет его как внутренний запрос.

ОБНОВЛЯТЬ:

Options All +MultiViews

Это неверный синтаксис (я предполагаю, что у вас Apache 2.2, так как при запуске Apache 2.4 возникнет ошибка). Как отмечено вДокументация Apache:

Предупреждение
Смешивание Optionsс a +или -с теми, у кого его нет, не является допустимым синтаксисом и может привести к неожиданным результатам.

Чтобы выразить Alland, MultiViewsвам понадобятся две директивы:

Options All
Options +MultiViews

Allявляется значением по умолчанию (в Apache 2.2), поэтому это может быть необязательно. Однако предпочтительнее указать только необходимые вам параметры в одной директиве, например:

Options FollowSymLinks Includes MultiViews

решение2

можете ли вы попробовать сделать так: я думаю, это сработает

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^about$ https://example.com/about.html [R=301,L]

Вы также можете использовать перенаправление:

Redirect 301 /about http://example.com/about.html
Redirect 301 /any_dir/about http://example.com/about.html

Связанный контент