Як видалити .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 екстанції зі свого 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]
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]
Спробуйте це :) не знаю, чи працює.