Apache Rewrite 엔진은 모든 요청을 index.php로 리디렉션합니다.

Apache Rewrite 엔진은 모든 요청을 index.php로 리디렉션합니다.

Apache 웹 서버에 PHP 웹 애플리케이션이 있습니다.

서버의 웹 애플리케이션 경로는 다음과 같습니다./var/www/html/intern/organisation/example_app

웹 애플리케이션의 URL은 다음과 같습니다.
https://www.example.de/org1/intern/example_app/

나는 모든 요청이 다음 https://www.example.de/org1/intern/example_app/view1/으로 리디렉션되기를 원합니다.

https://www.example.de/org1/intern/example_app/index.php

내 로컬 XAMPP 서버에서는 해당 목적으로 작동하는 다음 .htaccess 파일을 사용합니다.

RewriteEngine On
RewriteBase /example_app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L]

하지만 그 파일이 서버에서 어떻게 보일지 전혀 모르겠습니다. 또한 서버에서 httpd.conf를 사용합니다. 해당 파일이 .htaccess파일을 방해하는 경우 아래에 있는지 궁금합니다 ./var/www/html/intern/organisation/example_app/

서버에서 재작성을 구성하는 방법을 아는 사람이 있습니까?

답변1

.htaccess하위 디렉터리 의 파일은 다음 /org1/intern/example_app/과 같아야 합니다.

DirectoryIndex index.php

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

그런 다음 하위 디렉터리에 있는 경우 동일한 .htaccess파일을 로컬 및 라이브 서버에서 사용할 수 있습니다 example_app/.

파일이 다시 쓰려는 파일 .htaccess과 동일한 디렉토리에 있으면 지시문 이 필요하지 않습니다 .index.phpRewriteBase

지시어 는 이미 서버 구성에 DirectoryIndex설정되어 있을 가능성이 높 으므로 여기서는 필요하지 않을 수도 있지만 완전성을 위해 포함해야 합니다. 애플리케이션 디렉터리 자체를 요청하는 경우(예: ) index.php에 필요합니다 .https://www.example.de/org1/intern/example_app/

이는 "내부 리디렉션" 또는 더 일반적으로 "다시 쓰기"라고 합니다. 단순히 "리디렉션"이라고 말하면 이는 완전히 다른 "외부(HTTP) 리디렉션"을 의미합니다.


.htaccess file해당 파일이 아래에 있는 를 방해하는지 궁금합니다 ./var/www/html/intern/organisation/example_app/

여러 .htaccess파일(및 서버 구성)이 충돌할 수 있습니다. 그러나 하위 구성의 mod_rewrite 지시어(동일한문맥, 즉.예배 규칙서)는 기본적으로 상위 구성의 mod_rewrite 지시어를 완전히 무시합니다.


곁에:(또는 아닐 수도 있음)

서버의 웹 애플리케이션 경로는 다음과 같습니다./var/www/html/intern/organisation/example_app

웹 애플리케이션의 URL은 다음과 같습니다.https://www.example.de/org1/intern/example_app/

약간 혼란스럽기는 하지만 파일 경로와 URL 경로가 일치하지 않는 것 같나요? Alias서버 구성에서 추가로 다시 작성하거나 구성했습니까 ? 아니면 파일 경로에 URL 경로 example_app와 다른 디렉터리가 있습니까?example_app

답변2

자세한 답변에 감사드립니다. 다시 쓰기 규칙은 문제가 아니었습니다.

문제는 간단했습니다. httpd.conf에서 AllowOveride를 활성화해야 했기 때문에 전체 .htaccess가 표시되지 않았습니다.

관련 정보