RewriteRule 반환 권한과 일치하는 요청이 거부되었습니다.

RewriteRule 반환 권한과 일치하는 요청이 거부되었습니다.

이상한 Apache 오류가 발생했습니다. 다음에서 오는 모든 /api/media/fi/le/path.jpg요청을 다시 작성하고 싶습니다 ./media/fi/le/path.jpg

가상 호스트에 설정된 다시 쓰기 규칙은 다음과 같습니다.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule /api/v1/* /src/api/v1/index.php [L]
RewriteRule /api/media/(.*) /media/$1 [L]

브라우저에서 서버를 가리키면 /media/fi/le/path.jpg이미지를 성공적으로 가져옵니다. 내가 가면 /api/media/fi/le/path.jpg리소스에 액세스할 수 있는 권한이 없다고 불평할 것입니다. 다시 쓰지 않고도 파일에 접근할 수 있기 때문에 허가를 받아야 합니다. 이미지를 제공할 수 있도록 마지막 RewriteRule을 어떻게 재정의해야 합니까?

LogLevel alert rewrite:trace6Apache가 뒤에서 무엇을 하는지 보기 위해 로깅 지시문을 추가했습니다 . 결과는 다음과 같습니다.

 init rewrite engine with requested uri /api/media/32/ee/0e60731bcb220c7c7b.jpg
 applying pattern '/api/v1/*' to uri '/api/media/32/ee/0e60731bcb220c7c7b.jpg'
 applying pattern '/api/media/(.*)' to uri '/api/media/32/ee/0e60731bcb220c7c7b.jpg'
 rewrite '/api/media/32/ee/0e60731bcb220c7c7b.jpg' -> '/media/32/ee/0e60731bcb220c7c7b.jpg'
 local path result: /media/32/ee/0e60731bcb220c7c7b.jpg
 go-ahead with /media/32/ee/0e60731bcb220c7c7b.jpg [OK]

URL에 수동으로 액세스 할 수 mydomain.com/media/32/ee/0e60731bcb220c7c7b.jpg있으며 이미지는 문제 없이 서버에 전달됩니다. 내가 무엇을 놓치고 있나요?

.conf 파일을 완성하세요:

<IfModule mod_ssl.c>
  <VirtualHost *:443>
        DocumentRoot /home/user/project/src
        ServerName project.com
        ErrorLog logs/project-error_log
        CustomLog logs/project-access_log common
        DirectoryIndex index.php

        <Directory /home/user/project/src>
            Options -Indexes +FollowSymLinks
            AllowOverride None
            Require all granted
        </Directory>

        LogLevel alert rewrite:trace6
        RewriteEngine on
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule /api/v1/* /api/v1/index.php
        RewriteRule /api/media/(.*) /media/$1 [L]

        SSLCertificateFile /etc/letsencrypt/live/project.com/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/project.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateChainFile /etc/letsencrypt/live/project.com/chain.pem
    </VirtualHost>
</IfModule>

답변1

다시 쓰기 엔진에 이상한 동작이 있습니다.

RewriteRule /api/media/(.*) /media/$1 [L]

반품은 영원히 금지됩니다. mv media images위 지시문을 로 변경한 후 RewriteRule /api/media/(.*) /images/$1 [L]권한 오류가 사라졌습니다.

관련 정보