Apache .htaccess mod_rewrite 및 청정 URL
-
06-07-2019 - |
문제
확인. 따라서 두 개의 다른 도메인을 통해 액세스 할 수있는이 사이트를 구축하고 있습니다. 따라서 .htaccess에서 rewritebase를 사용할 수 없습니다. 이 문제를 해결하는 데 사용하는 규칙 (아래)은 잘 작동하는 것 같습니다. 그러나 클린 URL (WAMP)이있는 로컬 상자의 아래 .htaccess 설정을 사용하면 모두 잘 작동하지만 라이브 서버 (공유 호스팅 램프)에서 사용하는 순간은 홈 페이지 ( 브라우저의 URL이 명확하게 업데이트되고 있지만 인덱스 아래에 있습니다.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/domain1.com/(.*)$
RewriteRule ^(.*)$ /domain1.com/index.php?q=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/domain2.com/(.*)$
RewriteRule ^(.*)$ /domain2.com/index.php?q=$1 [L,QSA]
</IfModule>
모든 도움이나 아이디어는 대단히 감사합니다.
- 루크
해결책
아마도 가장 좋은 방법은 로컬 박스의 문제를 재현하고 rewriteloglevel을 올리려면 무슨 일이 일어나고 있는지 확인하는 것입니다. (일반적으로 공유 호스팅에서 로그 레벨을 변경할 수 없으므로)
Apache 기본 구성에서 디렉토리를 다시 작성하여 문제를 "시뮬레이션"할 수 있습니다. (공유 호스팅은 분명히 .htaccess에 도달하기 전에 자체 재 작성을 수행합니다!) 문제를 재현 할 수 없다면 원격 서버에서 시행 착오 디버깅을 시작해야 할 수도 있습니다. 이것은 추악하지만 유일한 선택이라면 :
R (Redirect) 플래그를 사용하여 다시 작성한 URL을 브라우저로 다시 보냅니다. Telnet (또는 적절한 브라우저 애드온)을 사용하여 HTTP 응답을 검사하십시오.
Regexes에서 점들을 탈출하는 것을 잊지 마십시오!
참고로, 재 작문 패턴은 그 위의 재 작성기 전에 일치합니다. 이런 종류의 설정은 아마도 성능에 더 좋을 것입니다.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/domain1\.com/(.*)$ /domain1.com/index.php?q=$1 [L,QSA]
# ^ should be escaped
나는 이것을 테스트하지 않았다.