Под «удалить .html» вы имеете в виду «не требовать наличия .html»?
Гонки за легкостью на орбите
@Tomalak: Да, а также перенаправлять URL-адреса с ".html" на те, у которых нет. Моя проблема в том, что это приводит к бесконечному перенаправлению. Моя текущая настройка позволяет сделать доступными и www.example.com/page.html, и www.example.com/page, что не подходит для SEO.
ПРИМЕЧАНИЕ. При тестировании .htaccessне используйте 301 редирект. Используйте 302, пока не закончите тестирование, так как браузер будет кэшировать 301 сек. См. Https://stackoverflow.com/a/9204355/3217306
Наконечник на 301-е и кеш браузера - вот что решило мои проблемы.
bgfvdu3w
@KnocksX Я больше не веб-мастер и не в состоянии помочь
binaryfunt
84
Чтобы удалить расширение .html из ваших URL-адресов, вы можете использовать следующий код в root / htaccess:
RewriteEngine on
RewriteCond%{THE_REQUEST}/([^.]+)\.html [NC]RewriteRule^/%1[NC,L,R]RewriteCond%{REQUEST_FILENAME}.html -f
RewriteRule^%{REQUEST_URI}.html [NC,L]
ПРИМЕЧАНИЕ. Если вы хотите удалить любое другое расширение, например, чтобы удалить расширение .php, просто замените везде html на php в приведенном выше коде.
Мне это ничего не дает. Есть ли причина, по которой это не сработает?
Майкл Яворски 02
У вас есть настоящий файл по запрошенной ссылке? Это было бы вызвать!-f
Martijn
72
Это должно сработать для вас:
#example.com/page will display the contents of example.com/page.htmlRewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteCond%{REQUEST_FILENAME}.html -f
RewriteRule^(.+)$ $1.html [L,QSA]#301 from example.com/page.html to example.com/pageRewriteCond%{THE_REQUEST}^[A-Z]{3,9}\ /.*\.html\ HTTP/RewriteRule^(.*)\.html$ /$1 [R=301,L]
Я получал 404 в Godaddy с этим кодом, и я исправил его, поставив: Options + FollowSymLinks -MultiViews -Indexes вверху.
Лабанино
1
Думаю, это лучший и наиболее полный ответ, спасибо!
ctekk
Я пытался сделать это на локальном хосте, но он не работает. Есть ли что-то еще, что мне нужно сделать, нужно ли связывать файл .htaccess или как страница его распознает?
Пианист-программист
Как добавить расширение .php к # 301 из example.com/page.html в example.com/page, возможно ли это?
20
Вам также нужно будет убедиться, что у вас есть Options -MultiViews.
Ничего из вышеперечисленного не помогло мне на стандартном хосте cPanel.
Из всех вышеперечисленных ответов этот наконец-то сработал ... Я считаю, потому что мой сайт размещен на godaddy с помощью cPanel. Ключ - Options -MultiViews
Брэд Вандербуш
Да ничего в этом разделе не работает, ждите такого ответа! Вы спасли день!
Нил
Спасибо друг. Я не уверен, почему другие не сработали так, как ожидалось.
Nanoo,
13
Спасибо за ответы. Я уже решил свою проблему. Предположим, у меня есть мои страницы в http://www.yoursite.com/html , применяются следующие правила .htaccess .
Мне показалось, что это сработало, в отличие от других решений, представленных здесь, спасибо. Я бы добавил, что вам все равно нужно обновить ссылку (-ы) в вашем HTML (поэтому, если вы изначально ссылаетесь на свой .html-файл как <a href="page1.html"> </a>, вам следует обновить это как <a href=" example.com/page1"> </ a >, и тогда он будет работать.)
Лоренцо
Основным изменением для меня стал RewriteBase /бит. К сожалению, я не понимаю, почему это сработало, но я думаю, что скоро узнаю.
Keno Clayton
4
Для тех, кто использует хостинг Firebase, ни один из ответов на этой странице не подойдет. Потому что вы не можете использовать .htaccessна хостинге Firebase. Вам нужно будет настроить файл firebase.json. Просто добавьте строку "cleanUrls": trueв свой файл и сохраните ее. Вот и все.
После добавления строка firebase.json будет выглядеть так:
Чтобы удалить расширение .html из ваших URL-адресов, вы можете использовать следующий код в root / htaccess:
#mode_rerwrite start hereRewriteEngineOn# does not apply to existing directores, meaning that if the folder exists on server then don't change anything and don't run the rule.RewriteCond%{REQUEST_FILENAME}!-d
#Check for file in directory with .html extension RewriteCond%{REQUEST_FILENAME}\.html !-f
#Here we actually show the page that has .html extensionRewriteRule^(.*)$ $1.html [NC,L]
Ответы:
Я думаю, что некоторое объяснение ответа Джона было бы конструктивным. Последующий:
проверяет, что если указанный файл или каталог соответственно не существует, то правило перезаписи выполняется:
Но что это значит? Он использует регулярное выражение (регулярные выражения) . Вот кое-что, что я сделал ранее ...
Я думаю , что это правильно.
ПРИМЕЧАНИЕ. При тестировании
.htaccess
не используйте 301 редирект. Используйте 302, пока не закончите тестирование, так как браузер будет кэшировать 301 сек. См. Https://stackoverflow.com/a/9204355/3217306Обновление: я немного ошибся,
.
соответствует всем символам, кроме новой строки, поэтому включает пробелы. Кроме того, вот полезная шпаргалка по регулярным выражениямИсточники:
http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-fd/2034/2
https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules
источник
Чтобы удалить расширение .html из ваших URL-адресов, вы можете использовать следующий код в root / htaccess:
ПРИМЕЧАНИЕ. Если вы хотите удалить любое другое расширение, например, чтобы удалить расширение .php, просто замените везде html на php в приведенном выше коде.
источник
С помощью .htaccess под apache вы можете выполнить перенаправление следующим образом:
Что касается удаления .html из URL-адреса, просто укажите ссылку на страницу без .html.
источник
!-f
Это должно сработать для вас:
источник
Вам также нужно будет убедиться, что у вас есть
Options -MultiViews
.Ничего из вышеперечисленного не помогло мне на стандартном хосте cPanel.
Это сработало:
источник
Спасибо за ответы. Я уже решил свою проблему. Предположим, у меня есть мои страницы в http://www.yoursite.com/html , применяются следующие правила .htaccess .
источник
Я использую этот .htacess для удаления расширения .html с моего сайта, убедитесь, что это правильный код:
источник
RewriteBase /
бит. К сожалению, я не понимаю, почему это сработало, но я думаю, что скоро узнаю.Для тех, кто использует хостинг Firebase, ни один из ответов на этой странице не подойдет. Потому что вы не можете использовать
.htaccess
на хостинге Firebase. Вам нужно будет настроить файл firebase.json. Просто добавьте строку"cleanUrls": true
в свой файл и сохраните ее. Вот и все.После добавления строка firebase.json будет выглядеть так:
источник
Чтобы удалить расширение .html из ваших URL-адресов, вы можете использовать следующий код в root / htaccess:
Спасибо
источник
Попробуйте это :) не знаю, работает ли это.
источник