Magento URL에서 /index.php를 제거하면 404 오류가 발생합니다


26

Magento ver를 사용하고 있습니다. 1.7.0.2.

여기 내 웹 사이트에 대한 링크입니다 : http://dev.blokeundees.com.au/

/index.phpURL 에서 폴더 를 제거해야 .htaccess파일과 백엔드를 편집하고 (보안, 웹 서버 다시 쓰기) /index.php제대로 제거되었습니다.

그러나 프런트 엔드에 액세스하면 인덱스 페이지를 제외한 모든 페이지에 대해 404 오류 (페이지를 찾을 수 없음)가 반환됩니다.

왜 이런 일이 일어나고 있는지 모르겠습니다.


@ sander-mangel이 설명했듯이 htaccess, 무엇이 잘못되었는지에 대한 아이디어를 얻기 위해 htaccess 컨텐츠를 제공하겠습니다
Sylvain Rayé

1
문제를 해결 했습니까?
Sander Mangel

답변:


27

마 젠토 URL에서 index.php를 제거하는 방법

마 젠토 (Magento)는 온라인 판매를위한 환상적인 플랫폼이며, 아마도 최고라고 생각하지만, 항상 SEO로 좌절하게 된 한 가지가 있습니다… 모든 내부 페이지의 URL에있는 성가신 index.php 디렉토리 – 악몽!

그들에게는 이점이 없습니다.

그들은 SEO에 나쁘고 사이트 구조와 일관성에 나쁘고, 나처럼 깨끗한 URL 괴물에게는 나쁘다. 그들은 충분히 섹시하지 않습니다. 정리해 봅시다.

두 단계로 SEO 친화적 인 마 젠토 URL

다행히도 최근에 클라이언트를 위해 Magento 매장을 운영하는 동안 약간의 파기를 수행하여 문제에 대한 간단한 해결책을 찾았습니다. 여기에는 Magento 관리자 설정에 대한 몇 가지 변경 사항과 간단한 .htaccess 파일의 추가 또는 수정이 포함되어 표준 저장소 URL 다시 작성을 분류합니다.

아래의 간단한 단계를 수행하면 자신의 Magento 매장을 통해 SEO 성공에 한 걸음 더 다가 갈 수 있으며 SEO는 관련성을 줄이려는 변명의 여지가 없습니다.

1) 설정을 변경하자, 관리자

가장 먼저해야 할 일은 Magento 관리자 패널 (index.php / admin)에 로그인하여 매우 간단한 설정을 변경하여 Magento가 저장소 전체에서 기본 기본값 대신 URL 재 작성을 사용하겠다는 사실을 알리는 간단한 설정을 변경하는 것입니다 URL.

로그인하고이 설정을 변경하십시오.

시스템> 구성> 웹> 검색 엔진 최적화로 이동하십시오.

웹 서버 다시 쓰기 사용 : 예

쉽지 않았습니까? 이제 마지막 단계입니다.

2) .htaccess 파일을 사용하여 URL을 다시 작성해 봅시다

마지막 단계는 관리자 설정에서 변경 한 설정을 보완하기 위해 Magento 설치 폴더에 .htaccess 파일을 생성하는 것입니다. 그러면 실제로 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가 머리카락을 뽑는 것을 확실히 막을 수 있습니다.

이것을 사용하거나 문제가 발생하면 아래 의견에 알려주십시오!


2
Magento 1.9.x 버전에서는 작동하지 않습니다. index.phpURL에서를 제거 하지만 왼쪽과 오른쪽으로 404가 발생합니다.
여름 개발자

10

작업 .htaccess파일 이 있는지 확인하고 , 선택적으로 새로운 Magento 버전 다운로드에서 가져올 수 있습니다.

또한 확인 mod_rewrite서버에서 활성화되어 . phpinfo();서버의 스크립트를 읽어서 수행 할 수 있습니다 . 이 Stackoverflow 게시물 은 방법을 알려줍니다.


또한 시스템-> 구성-> 웹-> 검색 엔진 구성-> 웹 서버 다시 쓰기 사용이 사용 가능한지 확인해야합니다.
Barbanet

작업 및 쓰기 가능 .htaccess 파일.
랩터

6

제거 index.phpURL에서 다음 단계를 수행하십시오.

  1. 로그인 Magento Admin
  2. 로 이동 System -> Configuration -> Web
  3. 에서 검색 엔진 최적화을 사용하여 웹 서버 다시 쓰기 를 선택 YES .
  4. 확인 당신의 안전보안되지 않은 기본 URL이로 끝나야합니다 "/" .
  5. 이제 .htaccess(magento 루트 폴더에 있음)를 편집 하고이 링크에 제공된 코드를 붙여 넣으십시오.

5

다음 사항 이외의 사항은 변경할 필요가 없습니다. 이 두 가지 설정 만하면 괜찮을 것입니다. 시스템-> 구성-> 웹-> 검색 엔진 최적화에서 예를 선택하십시오.

그리고 시스템-> 구성-> 웹-> 보안-> 프론트 엔드의 보안 URL 사용에서 예를 선택하십시오. httpd.config 파일에서 여전히 문제가 발생하면 캐시를 새로 고치십시오. AllowOverride 없음 AllowOverride로 변경 모두 모두 OK입니다.


내 httpd.config에는 AllowOverride None과 같은 줄이 없습니다. 그런 다음 AllowOverride All을 변경하는 방법
zus

3

대부분 WAMP / XAMPP에서 작업 할 때는 다음이 필요합니다.

1) rewrite_module이 활성화되어 있는지 확인

예를 들어 C : \ wamp에 wampp를 설치하면 C : \ wamp \ bin \ apache \ apache2.4.9 \ conf에서 httpd.conf를 찾아 # sign을 제거하여 활성화 할 수 있습니다.

LoadModule rewrite_module modules/mod_rewrite.so

2) RewriteBase를 활성화

예를 들어, C : \ wamp \ www \ magento에 magento v1.9를 설치할 때 magento 루트 폴더의 기본 .htaccess를 다음과 같이 편집해야합니다.

RewriteBase /magento/

또한 # 기호를 제거하여 기본 다시 쓰기 규칙을 활성화해야합니다.

RewriteRule .* index.php [L]

3) 시스템-> 구성-> 웹-> 검색 엔진 최적화에서 예를 선택하십시오.

그리고 시스템-> 구성-> 웹-> 보안-> 프론트 엔드의 보안 URL 사용에서 예를 선택하십시오.

LAMP 서버에서 작업 할 때 다시 쓰기 모듈이 작동하려면 위의 모든 항목을 확인해야하는 것과 비슷하지만 세부 사항에는 많은 차이가있을 것으로 생각했습니다.


3

Admin.을 제외하고 URL에서 index.php를 제거하는 작업 솔루션. 누군가 index.php를 URL에 넣으면 index.php가 포함되지 않은 URL로 리디렉션됩니다. 이를 위해 우리는 또한 검색 엔진 최적화에서 웹 서버 다시 쓰기 사용-예를 설정해야합니다.

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index.php/admin/
RewriteRule ^index.php/(.*) $1 [R=301,QSA,L]

3

먼저 시스템-> 구성-> 웹->으로 이동하십시오. 검색 엔진 최적화로 이동하십시오.

그리고 예를 선택하십시오웹 서버 다시 쓰기 사용 드롭 다운 를 하십시오.

이제 사이트 루트로 이동

열기 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]

아이디어를 업데이트 한 후에도 여전히 작동하지 않습니다. u pls @ magento.stackexchange.com/q/220973/57334
zus

2

서버에서 mod_rewrite가 활성화되어 있는지 확인하십시오. 내 경우에는 비활성화되었습니다. 서버에서 활성화하면 제대로 작동합니다.


내 서버에서 mod_rewrite가 활성화되어 있는지 여부를 어떻게 확인할 수 있습니까?
zus

2
  1. 사이트 루트 폴더로 이동하면 .htaccess 파일을 찾을 수 있습니다. 그냥 편집하십시오. 텍스트 편집기에서 열고이 줄을 찾으십시오.

Base / 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가 하위 폴더 (예 : 'shop')에 설치된 경우 다음 코드를 사용해야합니다.

<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. 그런 다음 관리자 패널로 이동하여 웹 서버 다시 쓰기를 활성화하십시오. 시스템> 구성> 웹> 검색 엔진 최적화에서 찾을 수 있습니다.

이제 "검색 엔진 최적화" 에서 " 웹 서버 다시 쓰기 사용" 옵션 을 "예"로 설정하십시오.

  1. 그런 다음 "보안" 에서 " 프론트 엔드에 보안 URL 사용" 옵션 을 "예"로 설정하십시오. 오른쪽 상단에있는 “저장 구성” 버튼을 클릭 하십시오 .

  2. 그런 다음 캐시 관리 페이지 (시스템> 캐시 관리)로 이동하여 캐시를 새로 고치고 웹 리디렉션을 새로 고치십시오.


2

magento 프로젝트의 루트에있는 .htaccess 파일에서 다음 텍스트를 변경해야했습니다.

#RewriteBase /magento/

RewriteBase /magento/

참고 : 웹 사이트 이름으로 magento를 변경하십시오.


2

다음 단계를 사용하여 내부 페이지를 포함하는 URL에서 index.php를 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 단계 : --------------- engaccess ON 다시하기 전에이 코드를 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 다시 쓰기
  • 서비스 아파치 2 재시작

이 3은 나를 위해 일했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.