2010-06-17 3 views
1

나는 모든 것을 올바르게했습니다. 내 서버는 mod_rewrite가 활성화되어 있고, 가상 호스트 경로는 AllowOverride가 All로 설정되어 있고 .htaccess 파일은 모든 사람과 동일한 다시 쓰기 규칙을 가지고 있습니다. 하지만 난 깨끗한 URL 경로를 사용하여 일부 페이지에 액세스하는 데 문제가 있습니다. 따라서 90 %의 페이지에서 깨끗한 URL이 제대로 작동합니다. 하지만 그 10 %는 그렇지 않습니다.Drupal Clean URL이 임의의 경로에 대해 임의로 끊어집니다.

해당 페이지가 있는지 여부를 확인했습니다. index.php? q = [경로]를 사용하여 액세스 할 수 있는지 확인했습니다. 그들은 깨끗한 URL 경로를 통해서만 접근 할 수 없습니다.

누구든지이 수수께끼를 도울 수 있습니까?

답변

0

mod_rewrite에는 URL을 도용하는 오랜 버그가 있습니다 (문제의 URL에는 이스케이프 문자가 있습니까?). 드루팔 (Drupal이이 일을하는지 모르겠다.하지만 다른 PHP 애플리케이션에서 올바른 엔트리 포인트에 도달하면 다시 작성하기 위해 코드를 추가해야했다.

불행히도 Drupal은 PATH_INFO에있는 검색 경로를 사용할 수 없습니다. 다른 많은 앱과 마찬가지로 mod_alias을 사용하면 훨씬 간단하고 훨씬 안정적입니다.

+0

나는 그렇게 생각하지 않는다. 다음은 경로 중 하나입니다 (예 : node/add/product). 그들이 오는 것처럼 평범한 것입니다. – picardo

+0

당신의 url은'index.php/node/add/product' 대신'index.php? node = add/product' 대신'index.php? q = node/add/product'에 쿼리 문자열의 경로를 사용하여 (mod_rewrite로) 경로를 경로로 사용하십시오. –

1

q = path/to/menu/item을 통해 페이지에 액세스 할 수 있기 때문에 오류가있는 mod_rewrite이고 Drupal이 아닌 것은 분명합니다.

재 작성으로 진행되는 작업을 디버깅하려면 문제가있는 페이지를 요청하는 동안 rewrite log을 켜고 tail -f it로 보내거나 index.php 또는 page.tpl의 맨 위에 print_r ($ _GET)을 지정하십시오. PHP가 실제로 요청되는 것을 확인하십시오.

잠재적으로 민감한 .htaccess를 여기에 게시하는 것이 편한 경우 잘못된 설정이 있는지 살펴볼 수 있습니다.

+0

자, print_r ($ _ GET)을 수행했습니다. Array ([q] => error/HTTP_NOT_FOUND.html.var) 경고 : 헤더 정보를 수정할 수 없습니다 - 이미 보낸 헤더 (X : \ Dropboxen \ Home \ My Dropbox \ Sites \ drupal에서 출력 시작됨) \ index.php : 4) X : \ Dropboxen \ Home \ My Dropbox \ Sites \ drupal \ includes 1366 행의 \ bootstrap.inc – picardo

관련 문제