virtualhost 섹션에 다음이 있습니다.
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/local.mysite/wordpress/$1
테스트 결과, 다시 쓰기 규칙을 추가해도 다음 RewriteRule ^/wordpress/wp-content/(.*)$ /wp-content/$1 [L]
과 같은 URL에는 아무런 영향을 미치지 않는 것으로 나타났습니다.
http://local.mysite/wordpress/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=....
.php
이름에 포함된 모든 요청이 fcgi로 전달되어 모든 다시 쓰기 규칙이 무시되기 때문입니까 ?
답변1
Proxypassmatch 또는 Proxypass를 사용하는 경우 php-fpm 프로세스에서 처리할 php 스크립트를 전달하고 php-fpm 프로세스는 .htaccess 규칙을 무시합니다. 이를 피하는 한 가지 방법은 이 답변에 설명된 대로 Apache sethandler를 사용하는 것입니다.https://serverfault.com/a/672969/189511,
<FilesMatch \.php$>
SetHandler "proxy:unix:/path/to/socket.sock|fcgi://unique-domain-name-string/"
</FilesMatch>
여기에 전체 솔루션을 복사하겠습니다.
몇 시간 동안 Apache 문서를 검색하고 읽은 후 풀을 사용할 수 있고 URL에 .php 파일이 포함된 경우에도 .htaccess의 Rewrite 지시문이 작동하도록 허용하는 솔루션을 생각해냈습니다.
<VirtualHost ...> ... # This is to forward all PHP to php-fpm. <FilesMatch \.php$> SetHandler "proxy:unix:/path/to/socket.sock|fcgi://unique-domain-name-string/" </FilesMatch> # Set some proxy properties (the string "unique-domain-name-string" should match # the one set in the FilesMatch directive. <Proxy fcgi://unique-domain-name-string> ProxySet connectiontimeout=5 timeout=240 </Proxy> # If the php file doesn't exist, disable the proxy handler. # This will allow .htaccess rewrite rules to work and # the client will see the default 404 page of Apache RewriteCond %{REQUEST_FILENAME} \.php$ RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f RewriteRule (.*) - [H=text/html] </VirtualHost>
Apache 문서에 따르면 SetHandler 프록시 매개변수에는 Apache HTTP Server 2.4.10이 필요합니다.
이 솔루션이 귀하에게도 도움이 되기를 바랍니다.