문제

(업데이트:답변이 제가 생각했던 것보다 더 주관적으로 보이기 때문에 이 질문을 커뮤니티 위키로 전환했습니다.필요에 따라 여러 가지 답변이 있습니다.)

application.cfc 및 index.cfm만 포함된 폴더가 있는 경우 동적으로 생성된 URL을 처리하는 빠르고 안정적인 방법은 무엇입니까?즉.해당 실제 .cfm 파일이 없는 URL입니다.

이 예제 URL은 404를 생성하지만 DB에서 페이지를 조회하고 index.cfm을 통해 반환해야 합니다.

http://www.myserver.com/cfdemo/mynewpage.cfm

사용해야 할까요? onMissingTemplate() 누락된 파일을 처리하기 위해 application.cfc에서?이 메소드는 onRequestStart(), onRequest(), onRequestEnd()를 처리하지 않기 때문에 피해야 하는지 궁금합니다.

또는 IIS(또는 Apache의 mod_rewrite)를 사용하고 있으므로 ISAPIRewrite 규칙을 설정할 수 있습니다.

# IF the request is not /index.cfm, doesn't exist and ends in cfm or html,
# rewrite it. Pass the requested filename $1.$2 as the 1st param: cgi.page
# append the remaining url params $4 ($3 is the ?)
RewriteCond %{SCRIPT_NAME} ^(?!/index.cfm)(.*)$
RewriteCond %{REQUEST_FILENAME}     !-f
RewriteCond %{REQUEST_FILENAME}     !-d 
RewriteRule ^\/(.*)\.(cfm|html)(\??)(.*)$   /index.cfm?page=$1.$2&$4 [I,L]

이러한 방법이 적절한가요, 아니면 이 목표를 달성하는 더 나은 방법이 없는 걸까요?Coldfusion에서는 application.cfc에 이러한 유형의 기능이 내장되어야 하는 것 같습니다.어쩌면 내가 그것을 놓친 것일 수도 있습니다.

도움이 되었습니까?

해결책

웹 서버 수준에서 URL을 다시 작성하는 데 아무런 문제가 없습니다.나는 그것에 투표할 것이다.

다른 팁

CF는 기본적으로 cfm/cfc 요청만 처리하므로 Application.cfc 시작 부분에서 다음과 같은 작업을 수행할 수 있습니다.

<cfif Right(cgi.SCRIPT_NAME, 9) NEQ "index.cfm">
    <!--- analyze the SCRIPT_NAME and start processing --->
</cfif>

웹 서버 구성을 사용하는 다른 파일 형식의 경우 내가 볼 수 있는 유일한 방법입니다.그러나 재작성 규칙을 만드는 대신 사용자 정의 404 핸들러를 사용해 볼 수 있습니다.적어도 IIS를 사용할 때 더미 페이지를 설정하면 cgi.QUERY_STRING에서 컨텍스트를 얻을 수 있습니다. 404.cfm (존재할 필요는 없음) 다음 확인을 수행합니다. ~ 전에 이전 예:

<!--- trap 404 requests triggered by IIS --->
<cfif right(cgi.SCRIPT_NAME, 7) EQ "404.cfm">
    <cflog file="mylogfile" text="404 error triggered by IIS. Context: #cgi.QUERY_STRING#">
</cfif>

Apache의 경우 다음 핸들러를 사용할 수 있지만 이 경우 컨텍스트를 추출할 수 있는지 확실하지 않습니다.

ErrorDocument 404 /404.cfm

SES URL에 대해 이 작업을 수행하는 경우 두 가지 조언을 제공합니다.

첫 번째는 시간이 지남에 따라 그것들의 중요성이 점점 작아진다는 것입니다.예를 들어 Google은 URL에 검색어 데이터가 포함되어야 함을 인식합니다.

두번째:CF는 기본적으로 호스트 이름/file.cfm/param1/param2 형식의 SES URL을 처리할 수 있습니다.레이 캠든의 블로그CFC, 예를 들어, 그런 식으로 작동합니다.CF8에서는 기본적으로 켜져 있지만 CF7에서는 활성화해야 합니다.이에 대해 유용한 정보가 많지는 않지만 Google(또는 Bing 등)에서는 쉬울 것입니다.

허용하실 수 있다면 다음과 같은 URL을 변환해 보겠습니다.

http://www.myserver.com/cfdemo/mynewpage.cfm

에게:

http://www.myserver.com/cfdemo/mynewpage OR
http://www.myserver.com/index.cfm/cfdemo/mynewpage

당신이 그것을 잃지 않도록 onRequest 행동 양식.첫 번째 작업은 웹 서버 수준에서만 수행할 수 있으므로 Apache 또는 IIS에서 수행됩니다.두 번째 작업은 ColdFusion에서만 수행할 수 있습니다.이것 좀 봐: http://www.cfcdeveloper.com/index.cfm/2007/4/7/Coldfusion-SES-URL.

그렇지 않은 경우, .cfm 마지막에는 Apache 또는 IIS의 URL 재작성 패키지를 사용하여 이를 제거한 다음 요청을 cfm 페이지로 전달하거나 다음 작업을 수행할 수 있습니다. onMissingTemplate.나는 손실을 수반하지 않는 해결책을 선택하려고 노력할 것입니다. onRequest 방법은 귀하에게 달려 있습니다.

나는 확실히 URL 재작성을 위해 갈 것입니다.이는 보다 예측 가능하면서도 일반화된 접근 방식일 뿐만 아니라 CF 서버에서 문자열 구문 분석 로드를 상당히 줄여줍니다.또한 CF가 실제 파일에 대한 요청을 처리하므로 onapplicationstart, onrequeststart 및 기타 이벤트의 이점을 얻을 수 있습니다.

여담이지만, 저는 개인적으로 항상 /index.cfm/foo/bar/와 같은 URL이 비전문적이고 해킹적으로 보이는 것을 발견했습니다.또한 파일 확장자나 후행 슬래시로 끝나지 않는 URL(예: /foo/bar)은 기술적으로 올바르지 않으며(적어도 기존 정적 사이트 규칙에 따라) 피해야 할 수도 있습니다.또한 Ben Doom이 "첫 번째는 시간이 지남에 따라 그것들이 점점 더 중요해진다는 것입니다."라는 주장을 어디서 얻었는지 궁금합니다.예를 들어 Google은 URL에 검색어 데이터가 포함되어야 한다는 것을 인식합니다." 내 경험에 따르면 실제로는 정반대의 사실을 발견했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top