사이트를 apache에서 nginx로 이동하고 다음 구성으로 고정되어 있습니다.nginx 언어 하위 디렉토리 구성
메인 (영어) 버전을 표시하는 http://example.com/ 사이트가 있습니다. 또한 필자는 대응하는 하위 디렉터리를 사용하여 열 수있는 몇 가지 언어를 추가로 보유하고 있습니다. http://example.com/dehttp://example.com/fr, http://example.com/es 또는 http://example.com/es/ (뒤에 슬래시가 있음).
이러한 하위 디렉터리는 가상 (존재하지 않음)이지만 루트 디렉터리에서 동일한 페이지를 열어야합니다. PHP 스크립트가 언어 표현을 처리합니다.
이제 영어 사이트는 정상적으로 작동하지만 다른 언어는 작동하지 않습니다. http://example.com/es/ (후행 문자 만 사용 가능)을 열고 기본 페이지를 열 수 있지만 다른 모든 페이지에 액세스 할 수 없습니다 (예 : http://example.com/es/test.html은 서한 친구 URL 임). 이미 비슷한 질문과 답변을 많이 검토했지만 유용하지는 않습니다. 다음과 같이
server {
....
root /var/www;
index index.php index.html index.htm;
location/{
rewrite ^/(de|fr|it|es)\/(.*)$ /$2;
try_files $uri $uri/ @fallback;
}
location @fallback {
rewrite ^(.*)$ /seo.php?$args last;
}
location ~* \.(jpeg|ico|jpg|gif|png|css|js|pdf|txt|tar|gz|wof|csv|zip|xml|yml) {
access_log off;
try_files $uri @static;
expires 14d;
add_header Access-Control-Allow-Origin *;
add_header Cache-Control public;
root /var/www;
}
location @static {
rewrite ^/(\w+)/(.*)$ /$2 break;
access_log off;
rewrite_log off;
expires 14d;
add_header Cache-Control public;
add_header Access-Control-Allow-Origin *;
root /var/www;
}
location /backend/ {
rewrite ^(.*)$ /backend/index.php last;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
그것은 이전에 아파치에 근무 :
RewriteRule ^(de|fr|it|es)\/(.*)$ $2
RewriteCond %{REQUEST_URI} !^/(backend|template)/
RewriteCond %{REQUEST_FILENAME} !\.(gif|jpeg|png|js|css|swf|php|ico)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ seo.php [L]
은 알려 주시기 바랍니다 여기 내 구성입니다. 감사.
이제 example.com/de을 열려고하면 대신 영어 버전이 열리고 대시 슬래시가 추가되지 않습니다 (도달하려는 항목). 언어 하위 디렉토리에있는 다른 URL은 여전히 작동하지 않습니다. 예 : example.com/de/test.html (친숙한 서재응). – Ssey
리디렉션 옵션을 추가하여 후행 슬래시를 추가했습니다. 두 번째 문제에 관해서는 오류가 무엇이고'/ seo.php'가 실행됩니까? –
도움 주셔서 감사합니다. 이제 디렉토리가 작동합니다. URL 다시 쓰기도 작동합니다. 문제는 다음과 같은 것으로 보입니다. PHP 스크립트에 액세스하려고 시도하면 다시 쓰지 않아야합니다. example.com/de/api.php 또한 seo.php로 경로가 지정된 것으로 보이고 404 오류가 표시됩니다. example.com/api.php에 액세스하려고하면 (언어 디렉토리없이) 작동합니다. – Ssey