Редирект html без html: 301 редирект со страниц на html на без html cо /? — Хабр Q&A

index\.html$ https://riverslot.net/ [R=301,L] #Redirect 301 /features/index.html /features/ #Redirect 301 /software-versions/index.html /software-versions/ #Redirect 301 /products/river-mobile/index.html /products/river-mobile/ #Redirect 301 /products/river-sweepstakes-system/index.html /products/river-sweepstakes-system/ #Redirect 301 /products/river-redemption-kiosk/index.html /products/river-redemption-kiosk/ #Redirect 301 /products/river-play-at-home/index.html /products/river-play-at-home/ #Redirect 301 /products/river-sweepstakes-gaming-tablet/index.html /products/river-sweepstakes-gaming-tablet/ #Redirect 301 /products/river-stand-up-cyber-cafe-kiosk/index.html /products/river-stand-up-cyber-cafe-kiosk/ #Redirect 301 /products/river-tv-center/index.html /products/river-tv-center/ # Кеширование <ifModule mod_expires.c> # Add correct content-type for fonts AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .
woff AddType application/x-font-woff .woff2 AddType image/svg+xml .svg # Compress compressible fonts AddOutputFilterByType DEFLATE application/x-font-ttf application/x-font-opentype image/svg+xml ExpiresActive On ExpiresDefault «access plus 5 seconds» # Cache Images ExpiresByType image/x-icon «access plus 26 months» ExpiresByType image/jpeg «access plus 6 months» ExpiresByType image/png «access plus 6 months» ExpiresByType image/gif «access plus 6 months» ExpiresByType image/svg+xml «access plus 6 months» # Cache Fonts ExpiresByType application/vnd.ms-fontobject «access plus 2592000 seconds» ExpiresByType application/x-font-ttf «access plus 2592000 seconds» ExpiresByType application/x-font-opentype «access plus 2592000 seconds» ExpiresByType application/x-font-woff «access plus 2592000 seconds» ExpiresByType application/x-font-woff2 «access plus 2592000 seconds» ExpiresByType image/svg+xml «access plus 2592000 seconds» # Cache other content types (Flash, CSS, JS, HTML, XML) ExpiresByType text/css «access plus 1 year» ExpiresByType text/javascript «access plus 6 months» ExpiresByType application/javascript «access plus 6 months» ExpiresByType application/x-javascript «access plus 2592000 seconds» ExpiresByType text/html «access plus 600 seconds» ExpiresByType application/xhtml+xml «access plus 600 seconds» </ifModule>
  • . htaccess
  • redirect
  • редирект

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Как скрывать расширения .

html и .php и редиректить на url без них на nginx?

Вопрос задан

Изменён 4 месяца назад

Просмотрен 98 раз

Как скрывать расширения .html и .php и редиректить на url без них п помощью nginx?

То есть при переходе на api.example.com/method/servers.get.php?ids=[2] нужно перенапрявлять на api.example.com/method/servers.get?ids=[2].

Есть уже готовый конфиг:

    server_name api.example.com  ;
    listen *.*.*.*:80;
    listen [*.*.*.*.*]:80;
    listen *.*.*.*:443 ssl ;
    listen [*.*.*.*.*]:443 ssl ;
    
    ssl_certificate "/var/www/httpd-cert/api.example.com_*-*-*-*-*_*.crt";
    ssl_certificate_key "/var/www/httpd-cert/api.example.com_*-*-*-*-*_*.key";
    
    charset utf-8;
    
    gzip on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css text/xml application/javascript text/plain application/json image/svg+xml image/x-icon;
    gzip_comp_level 1;
    
    set $root_path /var/www/*/data/www/api.
.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ { try_files $uri $uri/ /index.php?$args; } location @fallback { fastcgi_pass unix:/var/run/api.example.com.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } include "/etc/nginx/fastpanel2-sites/*/api.example.com.includes"; include /etc/nginx/fastpanel2-includes/*.conf; error_log /var/www/*/data/logs/api.example.com-frontend.error.log; access_log /var/www/*/data/logs/api.example.com-frontend.access.log; }

Помогите, пожалуйста, исправить его.

  • php
  • nginx
  • php-nginx

5

Для 301 редиректа с отбрасыванием .html и .php добавьте в конфиг перед

location ~ \.php$:

location ~ ^(. *)\.(?:html|php)$ {
    return 301 $1$is_args$args;
}

Но обращаю ваше внимание, что при этом location ~ \.php$ уже не будет отрабатывать.

7

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Перенаправить URL-адреса с .

html или .php на URL-адреса без него — Help

Ph5NTOMiki (Михаэль)

#1

У меня есть директива:

 try_files {путь}.php {путь}.html {путь}
 

, чтобы /about.html можно было загрузить с использованием URL-адреса /about
, но я также хотел бы перенаправить (перенаправление браузера, а не внутреннюю перезапись) /about.html только на /about
(удалить расширение PHP/HTML из URL-адреса)
Как это сделать, любая помощь приветствуется

francisslavoie (Фрэнсис Лавуа)

#2

Вы хотите перенаправлять только запросы, если файл существует на диске, или все запросы с такими расширениями?

Чтобы перенаправить все запросы, даже если файл не существует на диске:

 @stripExtensions {
полоса path_regexp (. *)\.(html|php)
}
перенаправить @stripExtensions {http.regexp.strip.1}
 

К вашему сведению, в Caddy версии 2.1 это можно сократить до (версия 2.1 бета 1 вышла, и вы можете попробовать ее сейчас):

 @stripExtensions path_regexp strip (.*)\.(html|php)
перенаправить @stripExtensions {re.strip.1}
 

Если вы хотите сначала проверить, существует ли файл на диске перед перенаправлением:

 @stripExtensions {
полоса path_regexp (.*)\.(html|php)
файл {
try_files {путь}.php {путь}.html
}
}
перенаправить @stripExtensions {http.regexp.strip.1}
 

В Caddy v2.1 также можно сократить до:

 @stripExtensions {
полоса path_regexp (.*)\.(html|php)
файл {путь}.php {путь}.html
}
перенаправить @stripExtensions {re.strip.1}
 

3 лайков

(Михаэль)

#3

Большое спасибо за оба

Ph5NTOMiki (Михаэль)

#4

@francislavoie Просто примечание: каждое регулярное выражение в вашем ответе должно использовать номер 1, а не 0

В итоге я использовал это:

 @stripExtensions {
полоса path_regexp (.*)\.(html|php)
файл {
try_files {путь}
}
}
redir @stripExtensions {http.regexp.strip.1} постоянный
 

1 Нравится

(Фрэнсис Лавуа)

#5

Ах да, ты прав — моя ошибка. Я обновил свой пост выше

1 Нравится

(Михаэль)

#6

франциславский:

 @stripExtensions {
полоса path_regexp (.*)\.(html|php)
файл {
try_files {путь}.php {путь}.html
}
}
перенаправить @stripExtensions {http.regexp.strip.1}
 

А также вы должны использовать либо try_files {http.regexp.strip.1}.php {http.regexp.strip.1}.html в директиве файла, либо еще лучше, как я написал в своем ответе

Ph5NTOMiki:

 файл {
try_files {путь}
}
 

просто используйте try_files {path} это проще и работает так же

francislavoie (Фрэнсис Лавуа)

#7

Ах да, верно. Я запутался между такими запросами, как /foo и /foo.html , и тем, как каждый из них обрабатывается.

Вы можете упростить его еще больше:

 @stripExtensions {
полоса path_regexp (.*)\.(html|php)
файл
}
перенаправить @stripExtensions {http.regexp.strip.1}
 

Сопоставитель файлов неявно выполняет try_files {путь} , если вы не дадите ему никаких параметров

Также к вашему сведению, если вы попытаетесь использовать результаты регулярного выражения внутри одного и того же сопоставителя, вы можете получить противоречивые результаты. Порядок, в котором будут запускаться матчеры, является случайным. Это будет просто удача, основанная на том, работают ли они в правильном порядке.

Ф5НТОМики (Михаэль)

#8

франциславский:

Также к вашему сведению, если вы попытаетесь использовать результаты регулярного выражения внутри одного и того же сопоставителя, вы можете получить противоречивые результаты.

Порядок, в котором будут запускаться матчеры, является случайным. Это будет просто удача, основанная на том, работают ли они в правильном порядке.

Спасибо, я этого не знал, и я скопирую это в свой Caddyfile, это выглядит лучше.

система (система) закрыто

#9

Эта тема была автоматически закрыта через 30 дней. Новые ответы больше не допускаются.

Netlify красивые URL-адреса не удалят расширение .html — поддержка

Buzut

#1

Я пытаюсь развернуть статический веб-сайт.

Я активировал опцию красивого URL-адреса, но все мои страницы по-прежнему доступны с .html или /index.html для каталогов в дополнение к версии без URL-адреса.

Я читал в документах о перенаправлениях и перезаписи, что с помощью этой опции следует обрабатывать URL-адреса, но я не могу заставить его работать, и наличие обоих URL-адресов, с расширением и без него, действительно является базовым с точки зрения SEO.

Что я упустил?

PS: название сайта → смеющийся-swirles-e5cbea.netlify.app
Спасибо

дурак

#2

Невозможно запретить нам обслуживать URL-адрес .html, если кто-то его введет. Идея состоит в том, что вы не публикуете этот URL-адрес, никто его не находит, и, таким образом, у вас нет проблем с дублированием контента.

Функция Pretty URL просто ПЕРЕЗАПИСЫВАЕТ ваши html, js и css, чтобы они ссылались на /file вместо /file.html. Мы по-прежнему будем обслуживать оба варианта, с включенной функцией или без нее.

Бузут

#3

Спасибо за ответ. Это проясняет ситуацию, поскольку функция Pretty URL, казалось, ничего не делала.

Могу ли я использовать директивы перенаправления для 301 перенаправления URL-адресов с расширением на адреса без расширения?

перри

#5

Привет, Бузут, мы все еще изучаем эту проблему и скоро свяжемся с вами с некоторыми обновленными рекомендациями

2 лайка

иен

#6

Привет, @buzut, если у вас включены красивые URL-адреса, люди не будут получать .html-версии ваших страниц с вашего сайта, поскольку мы переписываем HTML-код вашего сайта, чтобы удалить расширение .html. Они попадут на эти страницы только в том случае, если введут их напрямую. Вы можете попробовать добавить перенаправление 301 для каждого файла, оканчивающегося на .html, но это похоже на большую работу с минимальной выгодой. Для каждой статьи или публикации вам придется делать что-то подобное, и даже в этом случае вы можете столкнуться с проблемой бесконечного цикла, поскольку вы перенаправляете на одну и ту же страницу:

 /статья.html /статья 301!
 

Это также , а не , что-то, что будут анализировать наши перенаправления:

 /*.html /:splat 301!
 

Поскольку вы думаете о SEO, я хотел бы поделиться этим сообщением нашего технического директора о каноническом заголовке ссылки, который мы развернули, когда вы включаете личный домен на своем сайте. Возможно, вас заинтересует:

Надеюсь, это помогает! Пожалуйста, дайте нам знать, если мы можем ответить на любые другие вопросы по этому поводу.

2 нравится

интеллектуальное

#7

Привет команда,

красивый URL-адрес включен, но он не обслуживает страницу без .html Не работает: https://amp.houseofcandy.in/product-category/store

Пожалуйста, помогите.
Что я упускаю?

Люк

#8

Привет, @intellemo, я посмотрел файлы для сайта. Вот имена:

 /product-category/store. html.html
/product-category/marshmallow.html.html
/product-category/gums-and-jelly.html.html
/product-category/chocolates.html.html
/product-category/fizzy.html.html
/product-category/lollipops.html.html
/product-category/hard-boil.html.html
/product-category/gift-boxes.html.html
/product-category/товары.html.html
 

Подводя итог, можно сказать, что настройка красивых URL-адресов удаляет одну строку .html , и проблема здесь в том, что нужно удалить две строки .html (а не одну).

Переименуйте эти файлы (например, с /product-category/store.html.html на /product-category/store.html ), и это решит проблему.

Вы можете загрузить развертывание с помощью кнопки, показанной на этом снимке экрана, чтобы подтвердить это:

Если это не исправит или если есть другие вопросы, пожалуйста, ответьте в любое время.

интеллектуальное

#9

Сработало.
Большое спасибо.

пратеккиш

#10

Мне интересно, как должны выглядеть наши внутренние ссылки?

У меня включен красивый URL-адрес, поэтому /about обслуживает содержимое /about.html .

Мои пользователи не вводят ссылки с расширением .html , но ссылки, которые я им даю, имеют это расширение.

Если я удалю расширение .html из всех внутренних ссылок, производственный сайт на netlify будет работать отлично, но это сделает настройку разработки непригодной для использования, поскольку ни одна из ссылок не работает без расширения (локально).

Есть предложения?

Я использую базовый шаблон статического сайта на основе веб-пакета для создания своего сайта.

Сайт: Консультационная и девелоперская компания Ruby on Rails, базирующаяся в Сан-Франциско и Бостоне. Мы создаем приложения Ruby on Rails и ReactJS — страница «О программе»: about
Boilerplate: GitHub — ericalli/static-site-boilerplate: лучший рабочий процесс для создания современных статических веб-сайтов.

куб.см @Люк @Перри

Люк

#12

Привет, @prateekkish. Вы используете netlify dev для настройки локальной разработки? Если нет, не могли бы вы попробовать использовать это и сообщить нам, работает это или нет?

1 Нравится

буквальная строка

№13

Спасибо за это, я использовал очень простое расширение живого сервера, прежде чем мне нужно было вручную добавить расширения html обратно в мои ссылки в разработке.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *