
그래서 나는 이것을 가지고 있습니다
RewriteCond %{REQUEST_URI} (da-dk)/(.*)(/|\.php)$
RewriteRule ^(da-dk)/(.*)(/|\.php)$ /$2$3 [L]
그러나 어떤 이유로 example.com/da-dk/에서는 "404 - 찾을 수 없음"을 제공합니다.
나는 아파치가 왜 그런 결론에 도달했는지, 즉 어떤 규칙을 만나고 따랐는지 이해하고 싶습니다.
답변1
이것이 루트 .htaccess
파일에 있다고 가정하면 ...
RewriteRule ^(da-dk)/(.*)(/|\.php)$ /$2$3 [L]
/da-dk/
URL 경로와 일치하는 요청이 da-dk/
정규식과 일치하지 않으므로 ^(da-dk)/(.*)(/|\.php)$
이 규칙이 처리/따르지 않습니다.
따라서 이 요청과 일치하는 다른 규칙이 없으면아니요규칙을 따르므로 404가 됩니다. (어떤 규칙이 "충돌"되는지에 관해서는 음, 다른 모든 규칙은 다음과 같습니다.마주친.)
덧붙여서, 앞선상태( RewriteCond
지시문)은 여기에서 완전히 불필요하므로 제거해야 합니다. 그 이상은 아무것도 하지 않습니다.RewriteRule
무늬이미 확립되었습니다.
특히 이 규칙(정규식)은 다음 형식의 URL과 일치합니다.
/da-dk/.php
/da-dk/<foo>/
/da-dk/<foo>.php
/da-dk/<foo>/<bar>/<baz>/
/da-dk/<foo>/<bar>/<baz>.php
일치하지 않습니다:
/da-dk/<foo>
/da-dk/
이 규칙은 /da-dk
요청된 URL(아마도희망다시 작성된 URL이 파일 시스템 디렉터리 또는 파일과 일치하는지 확인하세요.
/da-dk/
루트에 다시 작성해야 하는 경우 이를 허용하도록 위의 규칙을 수정할 수 있습니다(이 과정에서 약간 단순화할 수도 있음). 예를 들어 다음을 대신 시도해 보세요.
RewriteRule ^da-dk/(.+(/|\.php))?$ /$1 [L]
여기에서는 이후의 URL 경로 부분이 da-dk/
만들어집니다.선택 과목. (이 경우 $1
역참조는 효과적으로비어 있는.)
수량자를 에서 이것 *
으로 변경하면 +
(말도 안 되는) URL 일치를 피할 수 있습니다 /da-dk/.php
.
그럴 필요는 없어포착부분 da-dk
(첫 번째 경로 세그먼트)은치환문자열(두 번째 인수).
이제 역 $1
참조에는 접두사 뒤의 전체 URL 경로가 포함됩니다 da-dk/
. ( 원래 $2
와 마찬가지로 필요하지 않습니다 .)$3