2012-08-23 2 views
1

URL을 꽤 만들고 싶습니다. 이것은 현재 example.com/en/directions/에 500 오류를 생성하고 example.com/en/directions.php로 .PHP 잎mod_rewrite를 사용하여 파일 확장자를 잃고, 다시 쓰고, 슬래시를 사용하거나 사용하지 않고 작업하십시오.

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME}\.php -f 
    RewriteRule ^(.*)$ $1.php 
</IfModule> 

example.com/en/directions

example.com/en/directions.php

example.com/en/directions/

모두 다시 작성해야합니다.

조건을 다시 작성하고 규칙을 다시 쓰는 방법을 이해하게하려면 보너스 포인트가 필요합니다. 이 조건 중 하나라도과 일치하면 을 따르고, 이면이됩니다. 그리고 -d-f은 무엇을하고 있습니까? 당신이없이 가능한 후행 슬래시 그것을 에 대한 추가 검사를 할 필요가 있으므로

+0

다시 쓰 기 끝 부분에 [OR] 플래그를 추가하지 않는 한 다시 작성하십시오. – Oussama

답변

0

-f에 대한 체크 때문에 후행 슬래시 실패 :

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} ^(.*?)/?$ 
    RewriteCond %{DOCUMENT_ROOT}/%1.php -f 
    RewriteRule ^(.*?)/?$ $1.php 
</IfModule> 

조건을 재 작성 규칙 작업을 재 작성 방법에 대해 설명합니다. 이러한 조건 중 하나라도 일치하면이를 따릅니다. 그리고 -d와 -f는 어떨까요? 그들은 무엇을하고 있습니까?

규칙 앞에 오는 임의의 수의 숫자 은 해당 규칙에만 적용되며 모두 일치해야합니다. 그들은 자원 검사는 주어진 경로 지점 있는지,있는 -f-d에 관해서는

RewriteCond %{REQUEST_FILENAME} !-d [OR] 
    RewriteCond %{REQUEST_FILENAME} !-f 

: 당신은 하나 개의 조건 또는 다른 원하는 경우에, 당신은 조건의 끝에서 [OR] 플래그를 포함 할 수 있습니다 파일이나 디렉토리로 이동합니다. 전체 설명은 apache's mod_rewrite docs을 참조하십시오.

+0

감사합니다. 내가해야 할 독서가있는 것 같아. 실제로는 후행 슬래시가 상대 URL을 사용하여 탐색을 위반 한 이후 적절하지 않습니다. 그래서'RewriteRule^(. *?) $ $ 1.php'을 변경했습니다. 'RewriteCond % {REQUEST_URI}^(. *?) /? $'에서'/? '도 제거해야하는지 잘 모르겠습니다. 그것은 어느 쪽이든 차이를 만드는 것 같지 않습니다. – deadlyhifi

관련 문제