8 ответов:
С .htaccess под apache вы можете сделать перенаправление следующим образом:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\.html$ / [L,R=301]Что касается удаления .html из url, просто ссылка на страницу без .HTML-код
<a href="http://www.example.com/page">page</a>
Я думаю, что некоторое объяснение ответа Джона было бы конструктивным. Следующее:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-dпроверяет, что если указанный файл или каталог соответственно не существует, то правило перезаписи продолжается:
RewriteRule ^(.*)\.html$ / [L,R=301]но что это значит? Он использует регулярное выражение (регулярные выражения). Вот немного того, что я сделал раньше...
Я думаю это правильно.
Примечание: при тестировании ваш
.htaccessне использовать 301 редирект. Использовать 302 до завершения тестирования, так как браузер будет кэшировать 301s. Вижу https://stackoverflow.com/a/9204355/3217306обновление: я немного ошибся,
.соответствует всем символам, кроме новых строк, поэтому включает пробелы. Кроме того,вот полезный чит для regex листисточники:
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
Это должно работать для вас:
#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 ^(.+)$ .html [L,QSA] #301 from example.com/page.html to example.com/page RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/ RewriteRule ^(.*)\.html$ / [R=301,L]
удалить .расширение 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 в коде выше.
вам нужно, чтобы убедиться, что у вас есть
Options -MultiViewsКак хорошо.ни один из вышеперечисленных не работал для меня на стандартном хосте cPanel.
это работает:
Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ .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 extantion с моего сайта url, пожалуйста, убедитесь, что это правильный код:
RewriteEngine on RewriteBase / RewriteCond %{http://www.proofers.co.uk/new} !(\.[^./]+)$ RewriteCond %{REQUEST_fileNAME} !-d RewriteCond %{REQUEST_fileNAME} !-f RewriteRule (.*) /.html [L] RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/ [R=301,L]

Comments