programing

angular js에 사용할 apache 2에 대한 규칙 다시 쓰기

fastcode 2023. 4. 5. 22:18
반응형

angular js에 사용할 apache 2에 대한 규칙 다시 쓰기

물론 웹 전체에 mod rewrite 토론과 답변이 많이 있습니다.하지만, 나는 그것들을 잡는 데 어려움을 겪고 있어.그래서 여기서 물어보려고 했어요.

Andy Joslin이 코멘트에서 설명한 대로 하기 위한 개서 규칙을 요구하고 있습니다.

이것은 example.com의 루트에 있는 현재 dir 구조입니다.

  • 앱/
  • app/index.displays(angular js 응용 프로그램의 "루트")
  • api ('api'에 사용되는 Symfony 2 앱입니다.angular에서 Ajax 요청을 보내겠습니다.)

/api에 대한 요청을 제외한 모든 요청을 app/index.html로 리다이렉트하고 싶습니다.

예를 들어 다음과 같습니다.

http://example.com/categories/electronics/ipod은 http://example.com/app/index.html/categories/electronics/ipod에 접속하는 것과 같습니다.

app/index.html 부분은 숨겼으면 합니다.

http://example.com/api에 대한 요청은 예외입니다.이러한 URL 경로에 대해 ajax 요청을 해야 하기 때문입니다.

도움/가이드 감사합니다.

이 질문에 대한 인정된 답변은 구식이다.이제 Apache 2.2.16+에서 Conf 파일에서 FallbackResource 지시문을 사용할 수 있습니다.

FallbackResource /app/index.html

FallbackResource 디렉티브가 "/api" 경로를 무시하도록 하려면 다음 절차를 수행합니다.

<Directory /api>
FallbackResource disabled
</Directory> 

다음은 작업을 시작하는 방법입니다(이것을 /.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]

메모: 새로운 Apache 버전에 대해서는 다음 답변도 참조하십시오.이 답변은 훨씬 더 쉬운 것을 사용합니다.FallbackResource

이 답변의 문제는 여전히 file-not-found에 대해 404를 원한다는 것입니다.프런트 엔드 애플리케이션의 구축 방법에 따라서는, 특히 대규모 동적 애플리케이션을 구축하거나 프런트 엔드 작업을 아웃소싱 하는 경우, css나 다른 파일이 404를 반환하는 것이 일반적입니다.또한 각도 경로는 일반적으로 파일 시스템 상의 어떤 것과도 관련이 없습니다.1 개의 디렉토리로 좁히면, 상기의 기능이 동작하는 경우가 있습니다.예를 들어 파일 시스템 레이아웃(/ajs/)과 관련이 없는 모든 각도 경로에 공통 접두사를 사용하는 경우가 많습니다.할 수 있다면

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

그러면 더 말이 되겠지만, 저는 그게 잘 안 되는 것 같아요.또한 공통 프레픽스를 사용하면 백엔드에 관계없이 백엔드 규칙이 훨씬 단순해집니다.예를 들어, 역방향 프록시를 사용하지 않는 경우 단순 서버 전송 컨트롤러를 설정할 수 있습니다.Apache Rewrite 규칙을 쉽게 모델링할 수 있습니다.예:

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

단, 디렉토리/폴백 방식은 지금까지 본 적이 없기 때문에 앵글 포워딩만 필요한 경우에 대해 알아보고 싶습니다.감사합니다!

이것은 스콧 퍼거슨의 훌륭한 대답에 대한 약간의 변형과 정교함이다. 하다 보면 더 쓸 수 있는 것 같아요.<Location><Directory> . 。<Directory>디렉티브는 머신마다 다를 수 있는 절대 경로 이름을 사용합니다.

들어 의 Angular 앱이라고 index.htmlmy-app/index.html웹 서버의 문서 루트 아래에 있습니다. 이 하려면 '접속하다'를 사용하세요.http://localhost/my-app

/my-app/"my-app/my-app/my-app/my-app/my-app/my-app/my-app.다음으로, 고객님의httpd.conf일일: :

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

로 인해 Apache index.html에 있는 가 있는 index.합니다./my-app/찾을 수 없습니다.

예: "API" 등)/my-app/api 아마 '어디서'를 게 것 같아요.FallbackResource규칙을 지정합니다.★★★★

<Location "/my-app/api">
    FallbackResource disabled
</Location>

프로덕션 서버에서:

<VirtualHost *:80>
        ServerName XXX.com

        DocumentRoot /home/www/XXX.com/www

        # Local Tomcat server
        <Location /api/>
          ProxyPass http://localhost:8080/api/
          ProxyPassReverse http://localhost:8080/api/
        </Location>

        RewriteEngine On

        # If an existing asset or directory or API is requested go to it as it is
        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d [OR]
        RewriteCond %{REQUEST_URI} /api
        RewriteRule ^ - [L]

        # If the requested resource doesn't exist (and is not API), use index.html
        RewriteRule ^ /index.html

        ErrorLog logs/XXX.com-error.log
        CustomLog logs/XXX.com-access.log common
</VirtualHost>

접수된 답변의 /api 앞의 "!"는 올바르지 않습니다.

언급URL : https://stackoverflow.com/questions/15284038/rewrite-rules-for-apache-2-to-use-with-angular-js

반응형