Я знаю, что этот вопрос задавали раньше, но кто-нибудь знает, как можно скрыть .html расширения. Я пробовал много кодов и многие ответы из https://stackoverflow.com/, но я не вижу результата. То, что я снова спрашиваю у
У меня статический сайт, и я хотел удалить расширение, чтобы очистить мои URL. Я работал со статическими html-файлами.
Прежде чем удалять расширение, URL-адрес будет читать website.com/about.html
.
С удалением расширения он будет выглядеть как website.com/about. Надеюсь, это было ясно.
У меня есть файл .htaccess, и я пробовал многие из кодов, но он не работает. Вот некоторые коды
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\.html$ /$1 [L,R=301] RewriteCond %{THE_REQUEST} \ /(.+/)?index(\.html)?(\?.*)?\ [NC] RewriteRule ^(.+/)?index(\.html)?$ /%1 [R=301,L] RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule ^(.+)\.html$ /$1 [R=301,L] RewriteCond %{SCRIPT_FILENAME}.html -f RewriteRule [^/]$ %{REQUEST_URI}.html [QSA,L] RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /index\.html\ HTTP/ RewriteRule ^index\.html$ http://%{HTTP_HOST}/ [R=301,L] RewriteEngine On RewriteBase / RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ $1.html [NC,L] RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.html -f RewriteRule ^(.*)$ $1.html RewriteBase / RewriteEngine on RewriteRule ^(.*)\.htm$ $1.html [nc] RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L]
однако я не вижу никаких результатов … 🙁
У вас отменено ваше правило (первый из них будет работать иначе):
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ $1.html [L]
Исходным правилом был RewriteRule ^(.*)\.html$ $1 [L]
который переводится как «Если запрашиваемое имя ресурса заканчивается на .html
то выдается перенаправление в браузер, говорящее ему, чтобы спросить нас, есть ли у нас что-нибудь в том же имя без HTML ". Это приводит к 404 (так как Apache не имеет ничего, что могло бы служить для меньшего ресурса .html
').
Переключив .html
в пункт назначения RewriteRule ^(.*)$ $1.html [L]
мы изменим правило: «Если запрашиваемое имя ресурса не является файлом или каталогом на диске, попробуйте перенаправить запрос ( внутренне, не сообщать браузеру), как будто он закончился в .html
".
Обратите внимание, что для такой задачи вам не требуется сложный (по своей природе) RewriteRules.
Модуль mod_negotiation apache, часто включаемый по умолчанию, обеспечивает такое поведение с помощью опции Multivews .
Если сервер получает запрос для / some / dir / foo и / some / dir / foo не существует, тогда сервер считывает каталог, ищущий все файлы с именем foo. *, И эффективно подделывает карту типа, которая называет все эти файлы, назначая им те же типы носителей и кодировки содержимого, которые он имел бы, если бы клиент попросил одного из них по имени. Затем он выбирает наилучшее соответствие требованиям клиента и возвращает этот документ.
.ie, запрашивающий foo/bar
будет служить foo/bar
если это каталог и будет seak для foo/bar.html
, foo/bar.txt
и т. д., если нет.
Вам просто нужно убедиться, что этот параметр активирован в вашем текущем контексте (например, Directory)
Options +Multiviews
Посмотрите на это сообщение http://alexcican.com/post/how-to-remove-php-html-htm-extensions-with-htaccess/ Я еще не пробовал, но демонстрация кажется довольно убедительной
использовать это
Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ $1.html [L,QSA]