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