mod_rewrite, php 및 .htaccess 파일

Nov 05 2008

나는 그들이 어떻게 작동하는지 더 잘 이해하고 PHP에 대한 새로운 것을 배우기 위해 작은 CMS를 코딩하고 있습니다. 그러나 나는 문제를 발견했습니다.

mod_rewrite (누군가가 더 나은 솔루션을 가지고 있다면 내가 시도하고 있습니다)을 사용하여 멋진 깨끗한 URL을 생성하므로 site.com/index.php?page=2는 대신 site.com/tools가 될 수 있습니다.

내 이해에 따르면 새 페이지를 추가 할 때마다 .htaccess 파일을 변경해야하며 여기에서 문제가 발생하면 PHP는 권한이 없기 때문에 업데이트 할 수 없다고 계속 알려줍니다. chmod를 간단히 살펴보면 777 권한으로도 할 수 없다는 것을 알 수 있습니다.

mod_rewrite 지침에 대한 내 소스는 현재 중요 / 유용한 경우이 페이지 입니다.

답변

10 Ken Nov 05 2008 at 17:23

한 가지 접근 방식은 모든 것을 처리 스크립트에 다시 쓰는 것입니다.

RewriteEngine on
RewriteBase /

# only rewrite if the requested file doesn't exist
RewriteCond %{REQUEST_FILENAME} !-s 

# pass the rest of the request into index.php to handle     
RewriteRule ^(.*)$ /index.php/$1 [L]

그래서 당신이 요청이 있다면 http://yourserver/foo/bar/

당신이 실제로 얻는 것은 http://yourserver/index.php/foo/bar-그리고 당신은 / foo / bar로 무엇을할지 결정하기 위해 index.php를 떠날 수 있습니다 ($ _SERVER [ 'PATH_INFO']- tom 사용 )

.htaccess를 처음 수정하면됩니다. 이후 존재하지 않는 파일에 대한 모든 요청은 PHP에서 처리 할 수 ​​있습니다.

mod_rewrite에 대한 문서 도 유용 할 수 있지만 간단하게 유지하거나 모호한 오류를 추적하여 많은 수면과 머리카락을 잃을 준비를하십시오.

2 Tomalak Nov 05 2008 at 17:26

당신의 PHP는 매우 명백한 이유로 수정할 수 없습니다 .htaccess. 그것이 작동하도록하더라도 그것이 현명한 것인지는 잘 모르겠습니다.

mod_rewrite 규칙과 관련하여 좀 더 추상적 인 설정을 사용하는 것은 어떻습니까? 사용하려는 일반 URL 패턴을 정의하십시오. 예를 들면 :

/ object / action / id

그런 다음 HTTP 요청을 PHP 페이지로 다시 라우팅하는 규칙 세트를 작성하면 실행할 페이지를 결정합니다 (예 : 관련 PHP 스크립트 포함).

RewriteRule ^ / (\ w +) /? (\ w +)? /? (\ d +)?$ /index.php?object=$1 & action =$2&id=$3 [nocase]

이렇게하면 .htaccess자주 업데이트 할 필요가 없으며 여전히 유연합니다.