2012-09-04 3 views
4

이 내 htaccess로 파일입니다htaccess로 무한 리디렉션 순환에 속하는

# NO LISTING OF INDEXES 
Options -Indexes 

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # NIX THE www BECAUSE IT IS NO LONGER 1996 AND YOU'RE COOLER THAN THAT 
    RewriteCond %{HTTPS} !=on 
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    RewriteRule ^(.*)/$ http://%1/$1 [R=301,L] 

    # NIX TRAILING SLASHES BECAUSE SEO IS A VENGEFUL GOD AND WHATNOT 
    RewriteRule ^(.*)/$ $1 [R=301,L] 

    # SEND ALL NON-FILE REQUESTS TO index.php FOR FIGURING OUT 
    RewriteBase/
    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.php [L] 
</IfModule> 

# ERROR DOCS 
ErrorDocument 400 /error/400 
ErrorDocument 401 /error/401 
ErrorDocument 403 /error/403 
ErrorDocument 404 /error/404 
ErrorDocument 500 /error/500 

나는 폴더에 액세스하려고하면 (/images/ 또는 /images 또는 내 사이트에서 다른 실제 폴더 구조체)는 리디렉션 루프에 속합니다.

후행 슬래시 규칙 앞에 RewriteCond %{REQUEST_FILENAME} !-d을 추가하려고 시도했는데 적절한 폴더에 후행 슬래시가 적용될 때까지 리디렉션이 "고정"되지만 폴더 이름이 마치 내 구운 것처럼 마치 내 스크립트에 전달되었습니다 알아 내야 할 CMS에 대한 URI 쿼리.

이제는 URI가 불법적으로 나열하려고하는 폴더인지 확인하여 CMS 측에서 해결할 수 있지만 이상적으로는 .htaccess 중 하나 인 폴더 목록 호출을 리디렉션하는 솔루션이 될 것입니다. 그 금지 된 페이지 나는 거기에서 그렇게 유익하게 선언한다. 누구 하나 알고 있나요? 그것은 차이를 만들 것입니다하지만 일반적으로 재 작성 기본 나중에 시작하는 모든 조건 규칙

RewriteEngine On 
Options +FollowSymlinks 
RewriteBase/

전에 상단이와 함께 시작하는 경우

+0

RewriteRules의'R = 301' 부분을 사용하면 안된다. 301 HTTP 상태 코드는 요청 된 자원이 영구적으로 이동 한 경우를위한 것입니다. 예를 들어 * www *를 벗겨 내면 그 상태 코드를 사용하는 타당한 이유가되지 않습니다. –

+0

흠. 그것은 내가 컨텐트가 사용자가 찾고있는 내용 (후행 슬래시와 www 하위 도메인은 단지 장식 임)을 확신하는 경우에 개념적으로 나쁜 일로 생각하지 않았지만 검색 엔진 스파이더를 혼동하지 않기를 바랍니다 중복 된 콘텐츠에 대해. 나는 네가 여기있는 생명체를 찾고 있다고 효과적으로 말하고있다. – Hoatzin

답변

1

확실하지. 어쩌면 그걸 움직일 수 있습니다.

1

을 주석 /이 줄을 제거 : 이미 누군가가 디렉토리 내용을 나열 할 때 금단의 오류를 보여주기 위해 상단에 Options -Indexes이 있기 때문에

RewriteRule ^(.*)/$ $1 [R=301,L] 

당신은 정말 필요하지 않습니다를. 그 외에는 다음과 같이 약간의 조정을하면된다.

# NO LISTING OF INDEXES 
Options +FollowSymLinks -MultiViews -Indexes 

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

    RewriteCond %{HTTPS} !=on 
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    RewriteRule ^(.*)/$ http://%1/$1 [R=301,L] 

    # SEND ALL NON-FILE REQUESTS TO index.php FOR FIGURING OUT 
    RewriteRule ^index\.php$ - [L,NC] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-l 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule^index.php [L] 
</IfModule> 

# ERROR DOCS 
ErrorDocument 400 /error/400 
ErrorDocument 401 /error/401 
ErrorDocument 403 /error/403 
ErrorDocument 404 /error/404 
ErrorDocument 500 /error/500 
+0

일반적인 최적화 주셔서 감사하지만 그 특정 줄을 제거하고 싶지 않아요. 그 줄은 후행 슬래시를 먹는다. 나는'/ controller/action/foo'와'/ controller/action/foo /'가 중복 된 내용을 보여주고 다른 두 가지로 인덱싱되지 않도록하고 싶다. 어느 쪽이든, 이것은 폴더에 링크가 오류를 던질 수 있도록 그렇게하지 않은 것 같습니다. 그것은 여전히 ​​내 CMS에 다시 제공합니다. 어쩌면 나는이 기능을 포기하고 고려해야할까요? – Hoatzin

+0

실제로 슬래시를 제거하기위한 별도의 규칙이 필요하지 않습니다. 'DirectorySlash Off' 지시어를 사용하여이를 달성 할 수 있습니다. – anubhava