source

htaccess의 Apache Rewrite Rule - 루트가 끊어졌습니다.

manycodes 2023. 3. 22. 21:41
반응형

htaccess의 Apache Rewrite Rule - 루트가 끊어졌습니다.

간단한 구조를 가지고 있습니다.

Root
|-- [app] (Symfony Application)
|    |-- [app]
|    |-- [bin]
|    |-- [src]
|    |-- [vendor]
|    |-- [web]
|         |-- .htaccess (Symfony htaccess)
|
|-- [wp-admin]
|-- [wp-content]
|-- [wp-include]
|-- .htaccess (Root htaccess)

다음 매핑이 필요합니다.

http://example.com      ==> Wordpress 
http://example.com/app  ==> Symfony Application

여기 있습니다.

루트 htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^app(.*)$ app/web/$1 [L,QSA]
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

Symfony htaccess:

DirectoryIndex app.php

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
    RewriteCond %{HTTP:Authorization} .
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]
    RewriteRule ^ %{ENV:BASE}/app.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /app.php/
    </IfModule>
</IfModule>

문제:

문제는 Symfony 루트가 해결되지 않는다는 것입니다.

"GET /"에 대한 경로를 찾을 수 없습니다.

이에 대한 간단한 해결책은 없나요?

이 솔루션에는 ssh 액세스가 필요합니다.

htaccess 규칙에 따라 모든 솔루션을 포기합니다.ln -s 명령 대신 심볼릭 링크 사용 시도

여기서 가장 좋은 방법은 각 프로젝트를 도메인이 가리키는 별도의 폴더(여기서 public_html로 명명)에 넣는 것입니다.

ROOT
|
-[Symfony]
-[WP]
-[public_html] (folder where your domain is pointing) 

이제 - public_link 삭제 - wp에 심볼릭 링크 추가 (public html 이름 포함) - include wp create symbolic link to symbolic fony/web

ROOT
|
-[Symfony]
-[WP]
-- [app]  (symbolic link to symfony/web)
-[public_html] (symbolic link to WP ) 

다른 방법으로는 symfony에서 wp로 요청을 리다이렉트한 후 wp 응답을 사용자에게 푸시하는 것이 가능하다고 생각합니다.이런 솔루션을 보았습니다(기존 시스템 위에 새로운 앱을 빌드할 때 사용).그러나 이것은 심볼릭 링크보다 더 문제가 있습니다(여기서 아이디어를 볼 수 있습니다).https://www.enotogorsk.ru/en/2014/07/22/symfony-legacy-bridge/)

언급URL : https://stackoverflow.com/questions/48241213/apache-rewriterule-in-htaccess-routes-are-broken

반응형