.htaccess
규칙을 다시 작성하는 데 문제가 있습니다. 사용자 이메일의 URL을 비밀번호 재설정을 위한 토큰이 포함된 브라우저에 전달합니다.
현재 .htaccess
규칙:
사용자가 가려고 할 때
example.com/activate/00803e6632236414ebcdc34c7e7690d764e567083fac6
디버깅 시 이러한 오류가 발생합니다
example.com/activate/00803e6632236414ebcdc34c7e7690d764e567083fac6.php.php.php.php.php.php.php.php.php.php
그래서 아래 댓글을 따라 .htaccess를 다음과 같이 업데이트했습니다.
으아악다음 오류가 발생합니다:
AH00128: 파일이 존재하지 않습니다: /var/www/html/htdocs/activate/00803e6632236414ebcdc34c7e7690d764e567083fac6
이 규칙의 문제점은 파일 시스템 경로(예:
%{REQUEST_FILENAME}.php
)并重写到另一个文件系统路径(.php
)。这些不一定指同一件事。对于对/activate/foo
的请求,其中activate
不是文件系统目录,则REQUEST_FILENAME
的格式为/var/www/html/htdocs/activate
(因此文件检查成功,因为/var/www/html/ htdocs/activate.php
存在),但它将请求重写为activate/foo.php
(使用反向引用) - 该请求不存在。它将重复执行此操作,每次附加
.php
(내부 다시 쓰기 제한에 도달할 때까지, 기본값은 10))를 확인한다는 것입니다.참고 #1: request+
.php
가 파일에 매핑되었는지 확인하기 전에 요청이 파일이 아닌 디렉터리에 매핑되었는지 확인할 필요가 없습니다. 하나만 필요할 때 3개의 (비싼) 파일 시스템 검사가 필요합니다.참고 #2: 또한 TestString(첫 번째 인수)에서 리터럴 점을 이스케이프 처리하는 백슬래시가 필요하지 않습니다. 이는 정규식이 아닌 "일반" 문자열이기 때문입니다.
다시 작성하게 되는 동일한 파일 경로를 테스트할 수 있도록 이 규칙을 수정해야 합니다. 예:
으아악그런 다음 요청을
으아악/activate/
重写为
/activate.php/
(将
/
경로 정보로 스크립트에 전달하는 추가 규칙이 필요합니다. 이것이 일회성인 경우 "하드코드"될 수 있습니다. 예:
(나는
가 16진수 시퀀스라고 가정하는데, 이는 귀하의 예에서도 해당되는 것 같습니다.)
또는 유사한 요청이 있는 경우 더 일반적인 요청으로 작성하세요. 예를 들어.
으아악/<文件>/
到
/<文件>.php/
. 예:
나레이션:
이 규칙(외부 리디렉션)은 위의 재작성보다 우선 해야 합니다.