example.com/.php에서 .php 제거

example.com/.php에서 .php 제거

내 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.comexample.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.

관련 정보