내 URL에서 .php만 제거하기 위해 현재 다음이 있습니다.
# Remove trailing slashes
RewriteRule ^(.*)\/$ $1 [NC,L,R=301]
# Remove trailing .php extensions
RewriteCond %{THE_REQUEST} (\S*?)/(.*?)\.php [NC]
RewriteRule ^ %1/%2 [L,R=301]
# Add .php extension for final internal redirect
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteRule !\.php$ %1.php [NC,L]
그러나 이러한 규칙 example.com
은 example.com/.php
. 그러면 어떻게 해결할 수 있나요?
답변1
다음 중 하나를 수행해야 합니다.
- 대상 파일(확장명 포함
.php
)이 있는지 확인하세요.~ 전에내부적으로 다시 작성 - 디렉터리(문서 루트가 하나임)를 다시 작성하지 마세요.
- 귀하의 예에서와 같이 문서 루트만 다시 작성하지 마십시오.
예를 들어 특정 예에서와 같이 문서 루트만 다시 작성하지 않으려면 기존 RewriteCond
지시어를 수정할 수 있습니다.
# Add .php extension for final internal redirect RewriteCond %{REQUEST_URI} ^(.*)$
읽다:
RewriteCond %{REQUEST_URI} ^(/.+)$
/.+
슬래시 다음에 오는 것과 일치합니다.무엇, 문서 루트는 기본적으로 그 자체로 슬래시이므로 문서 루트는 제외됩니다.
모든 디렉터리(문서 루트 중 하나)를 다시 쓰지 않으려면 실제 디렉터리에 매핑되는 URL을 다시 쓰지 않도록 조건을 추가할 수 있습니다. 예를 들어:
RewriteCond %{REQUEST_URI} ^(/.+)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.php$ %1.php [NC,L]
그러나 액세스 가능한 디렉토리가 있는 경우 후행 슬래시를 제거하는 기존 규칙을 수정해야 합니다. 그렇지 않으면 디렉토리를 요청할 때 리디렉션 루프가 발생할 가능성이 높습니다(mod_dir은 기본적으로 슬래시를 추가하므로). 예를 들어:
# Remove trailing slashes RewriteRule ^(.*)\/$ $1 [NC,L,R=301]
위와 동일한 조건을 포함하도록 수정되어야 합니다.
# Remove trailing slashes, unless the request maps to a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]
또한 NC
여기에는 플래그가 필요하지 않습니다. 그리고 슬래시를 벗어날 필요가 없습니다.RewriteRule
무늬.
RewriteBase
또한 파일의 다른 곳에 정의된 지시문이 있어야 한다고 가정합니다 . 그렇지 않으면 에서 잘못된 리디렉션이 발생할 수 있습니다 .htaccess
.