2013-03-07 3 views
16

분명히, mod rewrite 토론과 답변이 모두 웹에서 가능합니다. 그러나, 나는 그들을 잡는 데 어려움을 겪고있다. 그래서 여기서 물어볼 줄 알았다. https://stackoverflow.com/a/11100438아파치 2가 각도 j와 함께 사용하는 규칙을 다시 작성

  • 응용 프로그램/
  • example.com의 루트에 내 현재의 디렉토리 구조입니다 :

    나는 앤디 조슬린 여기에 코멘트에 설명 된 일을하기 위해 재 작성 규칙에 대한 부탁 해요

  • app/index.html (각도 js 응용 프로그램의 "루트")
  • api ('api'에 사용되는 심포니 2 응용 프로그램입니다. 여기에서 아약스 요청을 보낼 것입니다. 각도.)

/api에 대한 요청을 제외하고 모든 요청을 app/index.html로 리디렉션하고 싶습니다. 예를 들어

:

http://example.com/categories/electronics/ipod

실제로 응용 프로그램/index.html을 부분이 있지만 숨길 수하는 내가 좋아하는 것 http://example.com/app/index.html/categories/electronics/ipod

에가는 것과 같다.

그런 다음 URL 경로에 대해 ajax 요청을해야하므로 http://example.com/api에 대한 요청은 예외가됩니다.

모든 도움/안내에 감사드립니다.

+7

나는이 질문을 닫아야한다고 생각하지 않는다. 그것은 angularjs에 관한 것이고 url-rewrite 두 주제는 모두 관련이있다. – elviejo79

+0

이것은 "주제에서 벗어난"것으로 표시되지 않습니다. 그것은 주제가 아닙니다. –

+0

@casperOne,이 백업을여십시오. –

답변

13

다음은가는 (당신의 /.htaccess 파일 내부에이를 넣어) 얻을 뭔가 :

Options +FollowSymLinks 
IndexIgnore */* 
RewriteEngine on 

# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_URI} !/api 

# otherwise forward it to index.html 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^app/. /app/index.html [NC,L] 
+0

고마워, 나는 내가 할 수있는 것을 사용할 것이다. 나는 지금 재 작성에 관한 대중적인 튜토리얼을 진행하고있다. 내가 원하는 것은 파일이 존재하기 때문에 파일을 제공하지 않는다고 생각하고 있습니다. 그 문제는 누군가가 '부분적인'파일을 요청할 수 있으며, 파일을 처리 할 것입니다. 모든 것을 app/index.html로 리디렉션 할 것입니다. 그러면 css/img와 같은 특정 디렉토리를 명시 적으로 건너 뛸 것입니다./ –

+1

이 코드는 거의 내 문제를 해결 ... 나는 애플 리케이션 규칙을 조금 바꿔야 만했다, 나는이 답변에 대한 나의 실제 예제를 남겼다 : http://stackoverflow.com/a/15415902/54848 – elviejo79

+0

나를 위해 doesnt work = (http://take.ms/DyLaQ – fdrv

18

이 질문에 대한 허용 대답은 구식이다. 이제 Apache 2.2.16 이상에서 conf 파일의 FallbackResource 지시문을 사용할 수 있습니다.

FallbackResource /app/index.html 

당신은 FallbackResource 지시어는 "/ API를"경로를 무시하려면 다음이 답변에

<Directory /api> 
FallbackResource disabled 
</Directory> 
+1

Cool 지시문을 사용하는 경우이 파일을 보관할 위치는 어떻게됩니까? 그러나 "/ api"에 대한 요청을 무시하는 동안 어떻게 사용하면 될까요? –

+1

/api 경로를 특별히 무시하도록 설정할 수 있습니다.이를 반영하여 답변을 편집했습니다. –

0

문제는 여전히 파일 - 찾을 수 없음에 대한 404을 원하는 것입니다. 사람들이 프론트 엔드 애플리케이션을 구축하는 방법에 따라 사람들이 CSS 나 다른 파일을 가지고있는 것은 매우 일반적입니다. 특히 더 큰 동적 응용 프로그램을 작성하거나 프론트 엔드 작업을 아웃소싱하는 경우 더욱 그렇습니다. 또한 각도 경로는 대개 파일 시스템의 어떤 것과도 관련이 없습니다. 단일 디렉터리로 범위를 좁히면 위의 내용이 작동 할 수 있습니다. 예를 들어 파일 시스템 레이아웃 (/ ajs /)과 관련이없는 모든 각도 경로에 공통 접두사를 사용합니다. 할 수 있다면

<Directory /ajs> 
FallbackResource /app/index.html 
</Directory> 

그러면 더 나을 것 같지만, 저에게는 효과가없는 것 같습니다. 공통 접두사를 사용하면 백엔드와 상관없이 백엔드 규칙을 훨씬 간단하게 만들 수 있습니다. 예를 들어 역방향 프록시를 사용하지 않는 경우 간단한 서버 전달 컨트롤러를 설정할 수 있습니다. 그리고 아파치 재 작성 규칙을 간단하게 모델링하게 만든다.예를 들어 : 내가 전에 디렉토리/대체 방법을 본, 내가 필요로하는 유일한 재 작성은 각 순방향 때 그것을 탐구 관심하지 않은 말했다

RewriteEngine On 
RewriteRule ^/ajs/(.+)$ /index.html 

. 감사!

0

이것은 스콧 퍼거슨 (Scott Ferguson)의 탁월한 대답에 대한 약간의 변형과 정교함입니다. 보다 <Location> 지시어를 사용하는 것이 더 쉽습니다. <Directory> 지시어는 절대 경로 이름을 사용하며 다른 시스템에서는 다를 수 있습니다.

그래서 각도 앱의 index.html은 웹 서버의 문서 루트 아래 my-app/index.html에 있다고 가정 해 보겠습니다. 그리고 http://localhost/my-app을 사용하여 앱에 액세스하려고합니다.

먼저 기본 href가 "/ my-app /"인지 확인하십시오. 다음으로, httpd.conf 파일 추가에 :

<Location "/my-app"> 
    FallbackResource /my-app/index.html 
</Location> 

/my-app/에서 모든 리소스를 찾을 수없는 경우 index.html을로드 할 아파치의 원인이됩니다.

/my-app/api과 같은 경로에서 API 호출을하는 경우이 호출에 FallbackResource 규칙을 적용하지 않아야합니다. 따라서 다음을 추가하십시오 :

<Location "/my-app/api"> 
    FallbackResource disabled 
</Location> 
관련 문제