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

Как заставить 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 В настоящее время у меня включен режим мультиэкранного просмотра, но я все равно получаю ошибку 404. Вот моя текущая настройка в VirtualHost

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

Вместо использования 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 с + или - с теми, у кого нет - недопустимый синтаксис и может привести к неожиданным результатам.

Выражать All и MultiViews вам понадобятся две директивы:

Options All
Options +MultiViews

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

Options FollowSymLinks Includes MultiViews

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

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