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