2011-09-01 3 views
1

mod_rewrite와 관련하여 질문이 있습니다. 나는 htaccess에서 <IfModule>을 할 수 있다고 알고 있지만, PHP는 어떨까요? html에서 projects/24과 같은 링크를 쓰고 있는데 실제로는 action=projects&id=24입니다. 다른 사람이이 앱을 설치하는 서버에 mod_rewrite가없는 경우 PHP에서 링크를 GET vars로 변경하는 방법은 무엇입니까?서버에 MOD 재 작성이없는 경우

+0

mod_rewite를 추가하지 않는 것이 가장 쉬운 해결책일까요? –

+2

왜 모든 downvotes? – animuson

+0

확실히 mod_rewrite를 추가하는 것이 더 쉬울 것이지만,이 앱을 판매하고 싶다면 사용자가 설치하는 것이 어려워 야합니다. 이것은 그냥 뒤로 물러 난다. 물론, 그들은 mod_rewrite를 설치할 수는 있지만, 설치되지 않았다면, 내 응용 프로그램이 깨지기를 원하지 않는다. – Ronnie

답변

3

사용 apache_get_modules()

편집 : 나는 정답을 부결,하지만 그는 분명히 RTM 할 수없는 장애 확실하지 않다. 여기

는 일부 코드가 설명하는 것입니다

<?php 

if (in_array("mod_rewrite", apache_get_modules())) { 
    echo 'has rewrite'; 
} else { 
    echo 'no rewrite'; 
} 

?> 

사용이 당신이 쓰고 싶은 링크의 종류를 결정합니다.

+0

이것은 정말 제가 찾던 답변이었습니다. 감사합니다. – Ronnie

+0

문제 없습니다. 또한 apache_get_modules 함수가 있는지 확인하십시오. IIS가 실행 중이거나 다른 것이 실행 중일 수 있습니다. – regality

+0

예, 나는 그 부분을 알아 냈습니다. 나는 localhost에서 테스트를하고 있었고 당신이 잘 작동했는지 확인할 수있었습니다. 그것을 내 서버에 밀어 넣고 오류가 발생하여 함수가 존재하지 않아서'function_exists()'를 믹스에 추가했는데 모두 좋았습니다. – Ronnie

0

어떻게 PHP에서 링크를 GET으로 바꿀 수 있습니까?

변수를 사용하여 모든 링크를 만드십시오.
그리고 Wordpress처럼 일부 구성 설정에 따라 모양을 선택하십시오.

+0

HTML 출력을 다시 작성한다는 의미인가? 또는 함수/매크로를 사용하여 링크를 생성하고 거기에 다시 쓰는 것을 의미합니까? – NikiC

+0

예 기본적으로 링크가 다르게 읽을 수 있는지 여부에 따라 서버가 mod_rewrite 여부에 따라 HTML 출력이 달라집니다 – Ronnie

0

ErrorDocument를 사용하고 userland (= php 스크립트)에서 실패한 요청을 처리 할 수있는 해결 방법이 있습니다. 하지만 이것은 (1) 로그를 오염시키고 (2) POST 요청 (서버에 따라 다름)과 함께 작동하지 않습니다. 그걸로 귀찮게하지 않을 것입니다.

실제 대안은 하나 또는 여러 개의 루트 스크립트와 함께 깨끗한 URL에 PATH_INFO을 사용하는 것입니다. 예를 들면 다음과 같이 사용해야합니다. +MultiViews 또는 SetHandler 또는 DefaultTypeForceType (php 스크립트를 설치하는 데 사용할 수 있습니다) [1]
하지만 mod_rewrite가 활성화되어 있지 않은 경우에도 허용되지 않는 명령이 종종 사용됩니다.

[1] 효과를 제한하려면 FilesMatch 섹션을 잊어 버리거나 하위 디렉토리에서는 다시 비활성화하십시오.