Удаление /index.php из URL Magento дает ошибку 404

26

Я использую Magento вер. 1.7.0.2.

Вот это ссылка на мой сайт: http://dev.blokeundees.com.au/

Я должен удалить /index.phpпапку из URL-адресов, поэтому я отредактировал .htaccessфайл и бэкэнд (безопасный, перезаписывает веб-сервер) и /index.phpбыл правильно удален.

Но при доступе к веб-интерфейсу он возвращает ошибку 404 (страница не найдена) для каждой страницы, кроме страницы индекса.

Я не знаю, почему это происходит.

Удит Гупта
источник
Как объяснил @ sander-mangel, проверьте, htaccessя добавлю, предоставьте нам ваш htaccess контент, чтобы понять, что не так
Сильвен Райе
1
Вам удалось решить проблему?
Сандер Мангель

Ответы:

27

Как удалить index.php из URL Magento

Magento - это фантастическая платформа для онлайн-продаж, возможно, лучшая, но есть одна вещь, которая всегда оставляла меня разочарованным как SEO… Этот надоедливый каталог index.php в URL-адресе ВСЕХ внутренних страниц - кошмар!

Там нет никакой пользы для них.

Они плохи для SEO, плохи для структуры и согласованности сайта, а еще хуже для чистого URL-фрика, как я. Они недостаточно сексуальны. Давайте очистить вещи.

SEO-дружественные URL-адреса Magento в два этапа

К счастью, пока я недавно делал магазин Magento для клиента, я немного покопался и нашел довольно простое решение этой проблемы. Он включает в себя несколько изменений в настройках администратора Magento и добавление или изменение простого файла .htaccess, чтобы переписать их стандартные URL-адреса хранилища.

Следуйте простым шагам, приведенным ниже, и вы станете на шаг ближе к успеху в SEO в своем собственном магазине Magento, и у вашего SEO не будет оправдания для снижения релевантности.

1) Давайте изменим настройки, админ

Первое, что вам нужно сделать, это войти в вашу админ-панель Magento (index.php / admin), чтобы изменить очень простую настройку, которая позволит Magento знать, что вы намерены использовать перезапись URL во всем магазине, а не их уродливые настройки по умолчанию. URL-адрес.

Войдите в систему и измените этот параметр:

Перейдите в Система> Конфигурация> Интернет> Поисковая оптимизация

Использовать перезаписи веб-сервера: ДА

Это было легко, не так ли? Хорошо, теперь для последнего шага.

2) Давайте использовать файл .htaccess для перезаписи URL

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

Если ваше хранилище Magento установлено в корневом каталоге (public_html), используйте это:

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

Если ваш магазин Magento установлен в подпапке (public_html / shop), используйте это:

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

Вы сделали - надеюсь, это поможет!

Это определенно помешает вашему SEO вытащить его или ее волосы.

Дайте мне знать в комментариях ниже, если вы используете это или столкнетесь с какими-либо проблемами!

mrumair.com
источник
2
Это не работает в моей версии Magento, 1.9.x. Он удаляет index.phpиз URL, но приводит к 404 слева и справа.
Летний разработчик
10

Убедитесь, что у вас есть рабочий .htaccessфайл, по желанию вы можете взять его из новой версии Magento.

Также проверьте, mod_rewriteвключен ли на вашем сервере. Это можно сделать, прочитав phpinfo();скрипт на вашем сервере. Этот пост Stackoverflow расскажет вам, как.

Сандер Мангель
источник
Также необходимо убедиться, что Система -> Конфигурация -> Интернет -> Настройка поисковых систем -> Использовать перезаписи веб-сервера включена.
Барбанет
Рабочий и записываемый .htaccess файл.
Raptor
6

Чтобы удалить index.phpиз URL, выполните следующие действия:

  1. Войти Magento Admin
  2. Перейти к System -> Configuration -> Web
  3. На вкладке « Поисковая оптимизация » « Переписать веб-сервер» выберите « ДА» .
  4. Убедитесь, что ваши безопасные и незащищенные базовые URL должны заканчиваться на «/» .
  5. Теперь отредактируйте ваш .htaccess(будет в корневой папке magento) и вставьте код, который дан по этой ссылке
Арслан Хашим
источник
5

Вам не нужно менять, кроме следующих пунктов. просто сделайте эти две настройки, и вы будете в порядке. в Система -> Конфигурация -> Интернет -> Поисковая оптимизация выберите YES.

А в Системе -> Конфигурация -> Интернет -> Безопасный -> Использовать безопасные URL-адреса во внешнем интерфейсе выберите YES. Обновите кеш, если проблема все еще остается, выполните в файле httpd.config. AllowOverride None изменить на AllowOverride All Все теперь будет хорошо

Мухаммед Азам
источник
В моем httpd.config нет такой строки, как AllowOverride None. тогда как я могу изменить AllowOverride All
Zus
3

В основном, когда мы работаем в WAMP / XAMPP, нам нужно:

1) проверить, включен ли rewrite_module

например, когда мы устанавливаем wampp в C: \ wamp, мы можем найти httpd.conf в C: \ wamp \ bin \ apache \ apache2.4.9 \ conf и включить его, удалив знак #, чтобы

LoadModule rewrite_module modules/mod_rewrite.so

2) включить RewriteBase

например, когда мы устанавливаем magento v1.9 в C: \ wamp \ www \ magento, нам нужно отредактировать .htaccess по умолчанию в корневой папке magento, чтобы

RewriteBase /magento/

А также нам нужно включить правило перезаписи по умолчанию, удалив знак #

RewriteRule .* index.php [L]

3) в Система -> Конфигурация -> Интернет -> Поисковая оптимизация выберите ДА.

А в Системе -> Конфигурация -> Интернет -> Безопасный -> Использовать безопасные URL-адреса во внешнем интерфейсе выберите YES.

Когда мы работаем на LAMP-сервере, похоже, что нам нужно проверить все вышеперечисленные элементы, чтобы позволить модулю перезаписи работать, хотя должно быть много различий в деталях.

Джон Инь
источник
3

Рабочее решение для удаления index.php из URL, исключая Admin.И если кто-то поместит index.php в URL, он будет перенаправлен на URL, который не содержит index.php. Для этого нам также необходимо установить параметр «Использовать перезаписи веб-серверов» - «Да» из Поисковой оптимизации

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index.php/admin/
RewriteRule ^index.php/(.*) $1 [R=301,QSA,L]
Digisha
источник
3

Для начала зайдите в system-> configuration-> web-> Search Engine Optimization.

И выберите « Да» в раскрывающемся списке «Использовать перезапись веб-сервера».

Теперь перейдите в корень вашего сайта

Откройте файл .htaccess, если нет, то создайте файл .htaccess

в локальном режиме этот файл скрыт, поэтому вам нужно показать скрытые файлы (Ctrl + H)

Теперь, если ваш корень в public_html /, скопируйте этот код в .htaccess

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

Если ваш сайт находится в подпапке public_html / yoursite, скопируйте этот код в .htaccess

RewriteEngine On
RewriteBase /yousite/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /yousite/index.php [L]
Принц Патель
источник
После обновления вашей идеи, вы все равно не работаете со мной, можете ли вы помочь мне @ magento.stackexchange.com/q/220973/57334
zus
2

Убедитесь, что mod_rewrite включен на вашем сервере. В моем случае это было отключено. Как только я включил его на сервере, он работает правильно.

Рави Бхалодиа
источник
Как я могу проверить себя, включен ли mod_rewrite на моем сервере,
zus
2
  1. Перейдите в корневую папку вашего сайта, и вы сможете найти файл .htaccess. Просто отредактируйте это. Откройте его в текстовом редакторе и найдите эту строку,

Переписать базу / magento /.

Just replace it with

Переписать базу. Поместите следующий код в .htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

Если ваш Magento установлен в подпапку, например «магазин», вы должны использовать следующий код:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /shop/
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /shop/index.php [L] </IfModule>
  1. Затем перейдите в панель администратора и включите перезапись веб-сервера. Вы можете найти его в System> Configuration> Web> Search Engine Optimization.

Теперь установите для параметра «Использовать перезаписи веб-сервера» в разделе «Оптимизация поисковых систем» значение «Да».

  1. Затем установите для параметра «Использовать безопасные URL-адреса во внешнем интерфейсе» в разделе «Безопасный» значение «Да». Нажмите кнопку «Сохранить конфигурацию» в правом верхнем углу:

  2. Затем перейдите на страницу управления кэшем (Система> Управление кэшем) и обновите кэш, а также обновите веб-перенаправления.

Рави Патель
источник
2

Мне просто нужно было изменить следующий текст в файле .htaccess в корне проекта magento:

#RewriteBase /magento/

в

RewriteBase /magento/

Примечание: просто измените magento на имя вашего сайта.

Ashish
источник
2

Удалите index.php из URL, включая внутренние страницы, в Magento, выполнив следующие действия:

Проверьте панель администратора. Для параметра «Использовать перезаписи веб-сервера» следует установить значение «Да» в разделе «Сеть»> «Поисковая оптимизация», а затем выполнить приведенные ниже 2 шага.

Шаг 1: --------------- Вставьте этот код поверх всех файлов макета (1 колонка и все остальные) --------------

<?php 
$abc = Mage::helper('core/url')->getCurrentUrl();
if(strpos($abc,'index.php/') !== false) {
$pos = strpos($abc,'index.php/');
$p1 = substr($abc,0,$pos);
$p2 = substr($abc,$pos+10,strlen($abc));
$url = $p1.$p2;
header("HTTP/1.1 301 Moved Permanently");
header("Location: $url");
exit();
}
?>

--------------------------------- КОНЕЦ Шаг 1 -------------- -------------------------

Шаг 2: --------------- Вставьте этот код перед «Перезаписать включение» в файл htaccess --------------

index.php в домене по умолчанию

RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteCond %{REQUEST_URI} !^/downloader.*$
RewriteRule ^(.*)index.php$ www.abc.com [R=301,L]
RewriteCond %{HTTP_HOST} ^abc.com$ [NC]

Перенаправление HTTP на HTTPS

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/downloader.*$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_URI} !^/downloader.*$
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

----------------------------------- КОНЕЦ Шаг 2 ------------ -------------------------------------

Примечание. На шаге 2 просто измените URL своего сайта. Не нужно ничего делать на шаге 1.

Абхинав Сингх
источник
1

Если кто-то использует Apache2 Ubuntu 16.04 , вы не видите файл httpd.conf где-либо на сервере, поэтому вам нужно перейти по пути: / etc / apache2 / apache2.conf , чем заменить приведенный ниже код

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

с кодом ниже:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

После этого перезапустите сервер: sudo service apache2 restart

Ребенок в Мадженто
источник
0
  • Перейдите в Система> Конфигурация> Интернет> Поисковая оптимизация> Использовать перезаписи веб-сервера и выберите ДА.
  • sudo a2enmod переписать
  • перезапуск службы apache2

Эти 3 сработали для меня.

двунаправленный маршрут
источник