Как удалить.html из URL?

Как удалить .html из URL статической страницы?

Кроме того, мне нужно перенаправить любой url с .html на тот, который без него. (например, www.example.com/page.html на www.example.com/page).

Ответ 1

Спасибо за ваши ответы. Я уже решил свою проблему. Предположим, что у меня есть мои страницы под http://www.yoursite.com/html, применяются следующие правила .htaccess.

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*).html\ HTTP/
   RewriteRule .* http://localhost/html/%1 [R=301,L]

   RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*)\ HTTP/
   RewriteRule .* %1.html [L]
</IfModule>

Ответ 2

Я думаю, что какое-то объяснение ответа Джона было бы конструктивным. Следующее:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

проверяет, что если указанный файл или каталог соответственно не существует, то правило перезаписи продолжается:

RewriteRule ^(.*)\.html$ /$1 [L,R=301]

Но что это значит? Он использует регулярное выражение (регулярное выражение). Вот что я сделал раньше... введите описание изображения здесь

Я думаю, что правильно.

ПРИМЕЧАНИЕ. При тестировании ваших .htaccess не используйте 301 переадресацию. Используйте 302 до завершения тестирования, так как браузер будет кэшировать 301-е. См. fooobar.com/questions/4362/...

Обновление: Я немного ошибся, . соответствует всем символам, кроме строк новой строки, поэтому включает пробелы. Кроме того, вот полезный regex cheat sheet

Источники:

http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-f-d/2034/2

https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules

Ответ 3

С .htaccess под apache вы можете сделать перенаправление следующим образом:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 

Что касается удаления .html из url, просто ссылку на страницу без .html

<a href="http://www.example.com/page">page</a>

Ответ 4

Это должно сработать для вас:

#example.com/page will display the contents of example.com/page.html
RewriteCond %{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/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

Ответ 5

Чтобы удалить расширение .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 в приведенном выше коде.

Ответ 6

Вам нужно также убедиться, что у вас есть Options -MultiViews.

Ни один из вышеперечисленных не работал у меня на стандартном хосте cPanel.

Это сработало:

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

Ответ 7

Я использую этот .htacess для удаления .html extantion с моего сайта url, пожалуйста, проверьте, что это правильный код:

    RewriteEngine on
RewriteBase /
RewriteCond %{http://www.proofers.co.uk/new} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]

Ответ 8

Следующие работали для меня:

для файла .htaccess:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.html [NC,L]

и удалите html из html-ссылок, например:

<a href="http://www.example.com/page">page</a>

или чтобы увидеть эффект непосредственно в действии, удалите html после имени страницы в панели поиска. А также удалите расширение html файла из html файла.

Ответ 9

RewriteRule /(.+)(\.html)$ /$1 [R=301,L] 

Попробуйте это:) не знаю, работает ли он.