.htaccess가 원하는 대로 작동하지 않습니다.

.htaccess가 원하는 대로 작동하지 않습니다.

저는 htaccess를 처음 접했지만 지난 며칠 동안 많은 것을 배웠습니다. 하지만 웹사이트가 원하는 대로 작동하지 않는 특정 부분에서 막혔습니다. 다음은 델리마가 있는 코드 부분입니다.

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME}.php -f
Rewriterule ^ %{REQUEST_FILENAME}.php [NC]
# RewriteCond /templates/%{REQUEST_FILENAME}.html -f
RewriteRule ^([^/\.]+)$ index.php?$1 [NC,S=1]
RewriteRule ^([a-zA-Z0-9]+)$ product.php?product_id=$1 [NC]

첫 번째 RewriteCond 및 RewriteRule은 완벽하게 작동합니다. 나중에 무슨 일이 일어날 지에 대한 내 문제입니다.

내가 달성해야 할 것은 사용자가 입력할 때/어떤 단어동일한 이름을 가진 파일이 유효한지 검색합니다./템플릿폴더이므로 다음과 같은 역할을 합니다.index.php?어떤 단어그렇지 않으면 다음과 같이 제공됩니다.product.php?product_id=어떤 단어. 는index.php두 번째 조건을 주석 처리하면 규칙이 제대로 작동하지만 추가하면product.php규칙이 작동합니다.

제공된 "태그"는 숫자, 문자, 하이픈으로 연결된 단어(예: 임의의 단어) 또는 숫자와 문자의 조합일 수 있습니다. 규칙은 대소문자를 구분해야 합니다.

이 문제에 대한 도움을 주시면 감사하겠습니다.

답변1

문제는%{REQUEST_FILENAME} 것이다.순수한URL에서 번역된 경로, 즉http://example.com/foobar/var/www/vhost/example.com/httpdocs/foobar웹 서버 설정 방법에 따라 다음과 같을 수 있습니다 . 다음과 같이 URL에 패턴 일치를 사용하는 것이 좋습니다.

RewriteCond %{DOCUMENT_ROOT}/templates/$1.html -f
RewriteRule ^([^\/\.]+)$ index.php?$1 [NC,S=1]

(테스트는 안해봤지만)

관련 정보