2012-04-20 3 views
7

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

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

  • Сейчас: www.example.de/cool-shoes.html
  • Будет: www.example.de/cool-shoes

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

я пытался до сих пор:

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

и:

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

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

ответ

8

ИТАК, после некоторых исследований, и не в состоянии добиться этого с помощью правила перезаписи, следующая строка кода работала:

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

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

ура!

+0

привет, только чтобы очистить мое сомнение, что это за правило? не предполагается, что первым параметром является выражение, которое вы получите от запроса, а второе - тот, который вы отправите в apache? они должны быть переключены ->^(. *) $ 1.html – alexserver

+0

Это правило удаляет '.html'. Первая часть - это то, что она соответствует: любой url, который имеет '.html'. «$ 1» - это то, что находится в круглой скобке совпадения: все, кроме '.html'. –

+0

Я бы добавил '' ', чтобы' .html' появился в конце URL-адреса: 'redirectMatch 301^(. *) \. Html $ $ 1' –

1

Это должно сделать трюк:

RewriteEngine On 
RewriteRule ^(\w+)\.html$ /$1 [R=301,L] 
+0

Спасибо, но ничего не меняется, я знаю, что могу просто удалить префикс на magento CMS, но прощай рейтинг google ... для чего нужен «w +»? следует ли использовать [R = 301, NC] ИЛИ ЧТО-ТО? –

+0

Хорошо, что это делает, так это любой запрос, заканчивающийся на .html (\ w + соответствует любым ненулевым строкам буквенно-цифровых символов) и перенаправляет его на тот же адрес, но без .html. Я предполагаю, что вам нужно что-то еще, а решение Vikas похоже на опрятный –

+0

Спасибо, я думаю, что вы идете правильно, решение Vikas - это хорошо, но, как я объяснял выше, только для случаев, когда URL существует, в этом случае этот URL (.html) будет удален, и я хочу, чтобы все были перенаправлены на новый URL-адрес без .html. Im редактируя основной .htaccess и добавив строку, которую вы предложили в нужном месте, но перенаправление не выполняется, возможно, я делаю это неправильно, добавив эту строку в основной файл .htacess всей установки magento, я пытаюсь сделать отдельный .htacess для этого магазина (у меня есть многопользовательская установка) Спасибо! –

1

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

+0

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

+0

Ответ на один ответ не является высоким качеством. Связанный контент может измениться или стать недоступным. Кроме того, пользователи не хотят, чтобы люди нажимали на ответ. Было бы лучше, по крайней мере, суммировать шаги здесь. –

0

Попробуйте это, чтобы положить в файл .htaccess Перенаправление ПОСТОЯННОГО www.mysite.de/cool-shoes.html www.mysite.de/cool-shoes это может быть полезным для вас

8

Это будет переписать URL как так http://example.com/page.html ->http://example.com/page

# Remove .html from url 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 
+0

Этот код добавляет' .html' не удалить Это. Это также правило перезаписи, а не правило перенаправления. В конце концов ему понадобится '[R = 301, L]' для любого перенаправления. –

2

Попробуйте добавить следующее в файл .htaccess в корневой директории вашего сайта перенаправления 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] 
1

Вот решение, которое сработало для меня.

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] 
+0

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

0

Это для URL-адресов, заканчивающихся .html /product/raspberrypi.html --->/продукта/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).

Смежные вопросы