2011-12-21 2 views
2

예쁜 URL을 만들기 위해 일련의 mod_rewrite 규칙을 만들려고합니다. 내가하면 작동하도록 강제하려면 어떻게.htaccess mod_rewrite challenge

  1. : 여기 내 첫 번째 문제의 확인

    RewriteRule ^(.+)/(.+)/(.+)$ /index.php?section=$1&area=$2&$3 
    

    :

    나는 index.php?section=123&area=345&option=1 as /123/345/option=1

    지금까지 너무 좋은이 작품까지 제공 할 변수 중 하나가 정의되지 않았습니다. 누군가 /section/area/ 대신 /section으로 탐색하면 htaccess가 꺼져있는 경우 자동으로 /area/을 기본값으로 만들 수 있습니까?

  2. 마찬가지로, /area/에는 후행 슬래시가 있어야합니까? 현재 슬래시가없는 경우 시스템에서 찾고 있지만 세 번째 변수를 찾지 못해서 404가 표시됩니다.

답변

1

당신은

RewriteRule ^(.+)/(.+)/(.+)|(.+)/(.+)/?|(.+)/?$ /index.php?section=$1&area=$2&$3 

당신은 [OR] 플래그에 의해 그 하위 재잘을 분리 엄마, 이런 식으로 뭔가를 찾고있다.

이 패턴은 기본적으로 제공되지 않을 수 있습니다. 수정해야 할 수도 있습니다.

+0

감사를 장려하지 않을 이것은 올바른 방향으로 멋지게 지적했습니다. 나는 명확성을 위해 다른 규칙들을 분리 해 버렸지 만, 이것은 본질적으로 코드의 수정이다 : 'RewriteRule^(. +)/(. +) $ /index.php?section=$1&area = $ 2 & $ 3 [L] RewriteRule^(. +)/(. +)/($)/$ /index.php?section=$1&area=$2 [L] 이 문제는 후행 슬래시 문제를 다루고 있으며, PHP를 사용하여 정의 할 것입니다. (예 : $$$$$$$$$$$$$) 필요한 경우 기본 영역 – whizzkid

0

사용자의 URL 입력을 "유효성 검사"하려고 할 때 상당히 엉망이 될 수 있습니다.

장기적으로 더 많은 유지 보수가 가능하도록 또는 더 많은 왜곡을 추가하려는 경우 분리 할 수 ​​있습니다. 여기

은 예입니다

#sunshine case 
RewriteRule ^(.+)/(.+)/(.+)$ /index.php?section=$1&area=$2&$3 

#if user enter /123/option=1, ie forgot 456 as the area 
RewriteRule ^(.+)/option=(.+)$ /index.php?section=$1&area=default&$2 

내가 슬래쉬하면 문제가 무엇 확실하지 않다가 아닌 URL을 123/456option=1? 어쨌든 몇 가지 가이드 here을 찾을 수 있습니다 될 것입니다.

내 의견 : 사용자가 URL을 다시 중지하고 그들에게 (404)를 제공하는 대신 귀하의 사이트가 제공하는 링크에 의존 자체로 URL을 입력 할 경우에, 나는 사용자 오류를