mod_rewrite 찾을 수 없으면 모두 다시 작성

mod_rewrite 찾을 수 없으면 모두 다시 작성

몇 가지 재작성 규칙을 만들어야 하는데 몇 년 동안 Apache HTTP를 사용하지 않아서 규칙이 약간 혼란스럽습니다...

일:

  1. 다음 URL을 다시 작성하세요 http://example.com/test/file.js.http://example.com/test/1/file.js
  2. 파일을 찾을 수 없는 경우 http://example.com/test/1/file.js- 파일을 반환합니다 http://example.com/test/1/index.html.

나는 생각했다 – 그것은 다음과 같을 것이다:

    <Location /test>
            AllowOverride All

            # if file http://example.com/test/1/file.js found - return it
            RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -f
            RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/test/1/$1 [L]

            # if file http://example.com/test/1/file.js NOT found - return index.html form /1/ subdir
            RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/test/1/index.html [L]

    </Location>

콘텐츠 /test/:

# ls -l
total 16
drwxr-xr-x 2 root root 4096 Aug 20 10:14 1
-rw-r--r-- 1 root root    6 Aug 20 08:57 index.html
-rw-r--r-- 1 root root    3 Aug 20 10:06 jj.ll
-rw-r--r-- 1 root root   64 Aug 20 08:50 test.html

그리고 /test/1/:

# ls -l 1
total 12
-rw-r--r-- 1 root root 15 Aug 20 11:02 file.js
-rw-r--r-- 1 root root 13 Aug 20 10:03 index.html
-rw-r--r-- 1 root root  7 Aug 20 10:14 jj.ll

그러나 유사한 URL을 열려고 하면 http://example.com/test/file.js어쨌든 파일을 받게 됩니다.http://example.com/test/1/index.html

답변1

다음과 같이 해결할 수 있습니다.

            RewriteCond %{REQUEST_URI} !/test/1
            RewriteRule ^.*test(.*) https://%{HTTP_HOST}/test/1$1 [L]

            RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -f
            RewriteRule ^.*test(.*) %{DOCUMENT_ROOT}/test/1/$1 [L]

            RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
            RewriteRule ^.*test(.*) %{DOCUMENT_ROOT}/test/1/index.html [L]

작동하는 것 같습니다.

관련 정보