2013-06-14 2 views
8

나는 내 htaccess로 파일에 다음과 같습니다RewriteRule의 500 내부 서버 오류

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule ^directory/(.*)$ directory/index.php?id=$1 

는 내가 달성하기 위해 노력하고있어 이것이다 : URL을 www.mydomain.com/directory/10이 방문

, 페이지 www.mydomain.com/directory/?id=10 URL의 모양을 변경하지 않고 브라우저에 표시됩니다.

위의 코드는 500 내부 서버 오류를 만듭니다.

어디서 잘못 알 수 있습니까?

+2

일반적으로 500 오류는 오류가 어딘가에 기록되었음을 의미합니다. Apache 및 PHP 오류 로그를 찾고 실제 오류가 무엇인지 확인하십시오. – IMSoP

+5

브라우저에 전달 된 500 오류는 전체 오류 메시지가 서버 로그에 있음을 알려야합니다. 그들을 읽으십시오. – Quentin

답변

16

귀하의 코드는 무한 반복을 유발하기 때문에 500 내부 서버 오류를 생성 할 수 있습니다. 귀하의 일치하는 URI 패턴은 다음과 같습니다 : ^directory/(.*)$

재 작성 전후의 URL과 일치하는 이유는 다음과 같습니다. 그리고 일단 최대 허용 내부 재 작성 한계에 도달하면 아파치는 500 개의 내부 서버 오류를 발생시키고 철수합니다.

이에 코드를 변경

: 코드 위

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^directory/(.*)$ /directory/index.php?id=$1 [L,QSA,NC] 

/directory/index.php이 유효한 파일이 될 것이기 때문에 처음 후에 RewriteRule의 후속 실행을 허용 할 수 있는지 확인합니다 추가 RewriteCond %{REQUEST_FILENAME} !-f 있습니다.

+1

그것은 훌륭합니다! 고맙습니다. – Tom

+0

환영합니다. 다행 이네요. – anubhava

+1

그냥 재 작성 규칙이 자체를 참조하고 있다는 것을 알지 못한다고 덧붙이고 싶었습니다. 다시 쓰기 조건을 추가하면 문제가 해결되었습니다. 명백하고 쉬운 것을 간과하는 것. –

1

당신은 앞에 슬래시를 추가하려고한다 : 전에 그와 함께 간파했습니다

RewriteRule ^/directory/(.*)$ directory/index.php?id=$1 

.

는 또한 디버그에 RewriteLog 및 RewriteLogLevel을 사용하고, 추가 정보를 아파치 오류 및 액세스 로그를 보면 : 아파치 로그 디렉토리에 로그 파일을 떠나

RewriteLogLevel 3 
RewriteLog ${APACHE_LOG_DIR}/rewrite.log 

. 내 경우 엔 /var/log/apache

+0

서버 오류가 정렬되었지만 '요청한 URL/디렉토리/10을이 서버에서 찾을 수 없습니다.'라는 아이디어가 있습니까? – Tom

+0

재 작성이 일치하지 않는 것 같습니다. –

+0

vhost에 RewriteLog (.htaccess에서는 유효하지 않음)를 추가하여 기록 할 로그 파일을 가리 킵니다. 예를 들어 답을 편집했습니다. –

9

나는 동일한 문제가있어 "재 작성"모듈이 아직 내 케이스에서 사용 가능하지 않다는 것을 알게되었습니다. 모듈

  • 활성화 "다시": sudo는 서비스 아파치를 다시 시작

희망 : sudo는이

  • 그리고 아파치 서버 다시 시작을 다시 a2enmod 그래서 나는 그것을 활성화 한 다음 아파치 서버를 다시 시작해야 이것은 누구에게나 도움이 될 것입니다.

  • +0

    신난다. .. 이것은 나에게 문제이었다. ... –

    0

    CodeIgniter를 사용 중이고 오류가 500 인 경우 솔루션을 따르십시오.

    CodeIgniter의 "index.php"세그먼트를 삭제하려면 2 가지 작업을 수행해야합니다.첫 번째는 빈에 index_page 정책의 값을 변경의 /system/application/config/config.php 파일을 편집하는 것입니다

    $config['index_page'] = ''; 
    

    두 번째 단계는 파일

    RewriteEngine on 
    RewriteCond $1 !^(index\.php|images|robots\.txt) 
    RewriteRule ^(.*)$ index.php/$1 [L] 
    

    .htaccess

    을 만드는 것입니다 그리고 바로 그거야! 이제부터 CodeIgniter로 만든 사이트/시스템의 URL은 더 이상 "index.php"라는 스레드 ("성가신"이라고도 함)를 갖지 않습니다.