Как убрать .html
из URL статической страницы?
Кроме того, мне нужно перенаправить любой URL-адрес .html
на тот, который его не использует. (т.е. www.example.com/page.html
к www.example.com/page
).
Как убрать .html
из URL статической страницы?
Кроме того, мне нужно перенаправить любой URL-адрес .html
на тот, который его не использует. (т.е. www.example.com/page.html
к www.example.com/page
).
Ответы:
Я думаю, что некоторое объяснение ответа Джона было бы конструктивным. Последующий:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
проверяет, что если указанный файл или каталог соответственно не существует, то правило перезаписи выполняется:
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Но что это значит? Он использует регулярное выражение (регулярные выражения) . Вот кое-что, что я сделал ранее ...
Я думаю , что это правильно.
ПРИМЕЧАНИЕ. При тестировании .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:
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 в приведенном выше коде.
С помощью .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>
!-f
Это должно сработать для вас:
#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]
Вам также нужно будет убедиться, что у вас есть Options -MultiViews
.
Ничего из вышеперечисленного не помогло мне на стандартном хосте cPanel.
Это сработало:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
Спасибо за ответы. Я уже решил свою проблему. Предположим, у меня есть мои страницы в 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>
Я использую этот .htacess для удаления расширения .html с моего сайта, убедитесь, что это правильный код:
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]
RewriteBase /
бит. К сожалению, я не понимаю, почему это сработало, но я думаю, что скоро узнаю.
Для тех, кто использует хостинг Firebase, ни один из ответов на этой странице не подойдет. Потому что вы не можете использовать .htaccess
на хостинге Firebase. Вам нужно будет настроить файл firebase.json. Просто добавьте строку "cleanUrls": true
в свой файл и сохраните ее. Вот и все.
После добавления строка firebase.json будет выглядеть так:
{
"hosting": {
"public": "public",
"cleanUrls": true,
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
Чтобы удалить расширение .html из ваших URL-адресов, вы можете использовать следующий код в root / htaccess:
#mode_rerwrite start here
RewriteEngine On
# 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 extension
RewriteRule ^(.*)$ $1.html [NC,L]
Спасибо
RewriteRule /(.+)(\.html)$ /$1 [R=301,L]
Попробуйте это :) не знаю, работает ли это.