Вопрос по magento, .htaccess, apache, url-rewriting – Удалить .html из URL с перенаправлением

7

У нас есть веб-сайт, к сожалению, все URL имеют.html суффикс, это установка Magento, Magento позволяет вам изменить это на CMS, но опять же, к сожалению, все эти URL с.html Суффиксы имеют хороший рейтинг в Google. Нам нужно перенаправить на не.html.

Итак, рассмотрим следующий сценарий: мы перестраиваем этот сайт с нуля, поэтому у нас есть те же самые URL на новом сайте, но без суффикса .html.

Now is: www.example.de/cool-shoes.html Will be: www.example.de/cool-shoes

Такwww.example.de/cool-shoes.html больше не будет существовать, и я пытался перенаправить с.htaccess без удачи

Я уже пробовал:

<code>RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule (.*)index\.html$ /$1 [R=301,L] 
</code>

а также:

<code>RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
</code>

но, похоже, это не работает ... есть идеи?

Ваш Ответ

8   ответов
9

после некоторого исследования и без достижения этого с помощью правила перезаписи сработала следующая строка кода:

redirectMatch 301 ^(.*)\.html $1

Это очень полезно, чтобы удалить любое расширение URL и избежать битых ссылок, надеюсь, поможет кому-то в будущем ...

ура!

Это правило удаляет.html, Первая часть - это то, что соответствует: любой URL, который имеет.html,$1 это то, что находится в скобках матча: все, кроме.html.
привет, просто чтобы очистить мои сомнения, что делает это правило? не предполагается, что первый параметр - это выражение, которое вы получите из запроса, а второй - тот, который вы отправите в apache? они должны быть включены - & gt; ^ (. *) $ 1.html
Я бы добавил$ чтобы обеспечить.html приходит в конце URL:redirectMatch 301 ^(.*)\.html$ $1
1

мерыи вы сможете удалить .html из URL без изменения файла .htaccess.

Ответ только на ссылку не качественный. Связанный контент может измениться или стать недоступным. Это также не удобно для пользователей, чтобы заставить людей нажать на ответ. Было бы лучше, по крайней мере, суммировать шаги здесь.
Спасибо, что на самом деле работает, только если ваши страницы ранее имели суффикс .html, но в этом случае эта страница с .html не существует. Он существует на старом сайте, но не на новом, поэтому каждый раз, когда кто-то идет на старый ulr (www.mysite.de/thing.html), перенаправляется на www.mysite.de/thing, а не на 404 Не найдено. Я думаю, что это может быть достигнуто с помощью htaccess, верно? Kaßta
1

RewriteEngine On
RewriteRule ^(\w+)\.html$ /$1 [R=301,L]
Спасибо, но, похоже, ничего не изменилось, я знаю, что могу просто удалить префикс в magento CMS, но до свидания в рейтинге Google ... что такое & quot; w + & quot; за? я должен использовать [R = 301, NC] ИЛИ ЧТО-ТО? Kaßta
Что он делает, так это принимает любой запрос, заканчивающийся на .html (\ w + соответствует любым ненулевым строкам буквенно-цифровых символов), и перенаправляет его на тот же адрес, но без .html. Я предполагаю, что вы хотите что-то еще, и решение Vikas кажется изящным
В этом правиле отсутствует[R=301,L] это говорит моду переписать, чтобы перенаправить, а не переписать.RewriteRule ^(\w+)\.html$ /$1 [R=301,L] должно сработать.
Спасибо, приятель, я думаю, что вы идете правильным путем, решение Vikas хорошо, но, как я объяснил выше, только для случаев, когда URL существует, в этом случае этот URL (.html) будет удален, и я хочу, чтобы все были перенаправлены на новый URL без .html. Я редактирую основной .htaccess и добавляю строку, которую вы предложили, в правильном месте, но перенаправление не выполняется, возможно, я делаю это неправильно, добавляя эту строку в основной файл .htacess всей установки magento. Я попробую сделать отдельный .htacess для этого магазина (у меня есть мультишоп установка) Спасибо! Kaßta
8

http://example.com/page.html - & GT;http://example.com/page

# Remove .html from url
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
Этот код появляется, чтобы добавить.html не удаляйте это. Это также кажется правилом перезаписи, а не правилом перенаправления. Было бы нужно[R=301,L] в конце, чтобы сделать любое перенаправление.
0

заканчивающихся на .html /product/raspberrypi.html --- & gt; / product / raspberrypi / (/product/raspberrypi/index.php) index.php скрыт. Мне понадобилось время, чтобы понять это. ЛОЛ...

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} \.html$
RewriteRule ^(.*)\.html$ $1 [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Вы должны использовать «REQUEST_URI»; и добавьте его перед правилами перенаправления индекса, поскольку оно может быть переопределено приложением. Важно знать, что его URI не является именем файла или каталогом, который мы пытаемся перенаправить, поскольку все имена файлов имеют index.php в корневых папках (Wordpress).

2

    RewriteCond %{THE_REQUEST} \.html [NC]
    RewriteRule ^(.*)\.html$ /$1 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME}\.html -f
    RewriteRule ^(.*)$ $1.html [L]
Эти правила выглядят подходящими для случаев, когда на вашем сервере действительно есть файлы, заканчивающиеся.html но ты не хочешь.html появляться в URL.
Это сработало для меня. Удалены.html с URL, но все еще загружает необходимый файл. Спасибо, Патрик!
2

его сайта, перенаправьте URL-адреса с расширением .html и удалите его.

Options +FollowSymLinks -MultiViews
DirectorySlash Off

RewriteEngine On

RewriteCond %{SCRIPT_FILENAME}/ -d
RewriteCond %{SCRIPT_FILENAME}.html !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.html$ /$1 [R=301,L]

RewriteCond %{SCRIPT_FILENAME}.html -f
RewriteRule [^/]$ %{REQUEST_URI}.html [QSA,L]
0

Постоянный редирект www.mysite.de/cool-shoes.html www.mysite.de/cool-shoes  это может быть полезно для вас

Похожие вопросы