2012-05-06 2 views
0

를 작동하지 (404)의 원인이 다음몇 가지 재 작성 규칙, 내가하고 프런트 컨트롤러가 제대로

내가

http://localhost/folder/login를 방문하면 다음

$pages = array('home', 'login', 'create-account', 'activate'); 
$page = ((empty($_GET['p'])) ? 'home' : $_GET['p']); 

if (in_array($page, $pages) && file_exists($page . '.php')) 
    include $page . '.php'; 
else 
    include '404.php'; 

나는이 mod_rewrite

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-z-]+)$ index.php?p=$1 [L] 
RewriteRule ^(activate)/([\w-]+)$ index.php?p=$1&f=$2 

작동 방식 :

내가 방문하는 경우 : 404 페이지로 저를 보내지 않고, (P 나의 정의)

http://localhost/folder/는 $$$$

그것은 나에게 실제 404을 줄 것이다. ? 이는 다시 쓰기 규칙이다

- - $의 index.php를 p = $ 1 [L]에만 AZ 및 수용 이후

한다 RewriteRule^(+ [AZ])

을 난에 재 기입하면

RewriteRule ^(.*)$ index.php?p=$1 [L] 

그것은 일을하고 (404)에 보내지 만 다음이 재 작동하지 않을 것입니다 :

RewriteRule ^(activate)/([\w-]+)$ index.php?p=$1&f=$2 

을 처음 의지의 일치입니다.

나는 장소 변경하려고하는 경우 :

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(activate)/([\w-]+)$ index.php?p=$1&f=$2 [L] 
RewriteRule ^(.*)$ index.php?p=$1 [L] 

나는 모든 페이지에 404를 얻고있다.

어떻게 해결할 수 있습니까?

+0

다시 쓰기 규칙은 소문자와 대시 만 찾고있는 것 같습니다. – OmnipotentEntity

+0

전체 질문을 읽어주십시오. – John

+0

'RewriteRule^([^ /] *) $ index.php? p = $ 1'을 사용하면 어떤 문자열도 /에서 제외시킬 수 있습니다. 따라서 첫 번째 문자열은 다시 작동합니다./쓰레기와 함께 쓰레기에 빠지지 않을거야. – OmnipotentEntity

답변

-2

문제가 해결되었습니다. 다른 방법으로 PHP 대신 URL을 구문 분석했습니다.

+0

재 작성 규칙이 단순하고 잘못되었습니다. 아마도 현재 PHP 코드로 실제 문제를 숨길 수는 있지만, 결국에는 결국 당신을 꼬집어 다시 돌아올 것입니다. – anubhava

+0

.htaccess도 다시 작성됩니다 ... – John

+1

이 경우 답변에 전체 솔루션을 제시하십시오. 그렇지 않으면 질문을 모두 삭제할 수 있습니다. – anubhava