1

我真的没有找到任何关于 URL 重写的文档(我无法理解,因为我意外地发现文档对于非本地人来说真的很难阅读)。

我正在寻找一种方法来重写所有匹配的路由/*\.(js|png|jpg|css|ttf|xml)$/path/media/尝试文件的存在,如果存在则返回它,否则404 not found

然后如果它以/ajax/将所有内容重定向到path/ajax/index.php else 开始,则将所有内容重定向到path/www/index.php

我不太明白我应该怎么做,现在我创建了 3 个位置 /media/、/ajax/ 和 /www/,但我不知道这是否是使用重写而不返回的正确方法,或者是这些位置是正确的方法。

我真的不明白我在sites-enabled/file关于 fastcgi 的文章中写了什么。这是解释器路径吗?

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

如果我理解正确,则表示“如果它以 .php 结尾,并且它存在于层次结构中,则执行它”。

而且我不知道我是否应该为每个必须处理 php(/www/ 和 /ajax/)的位置放置这种东西,特别是因为我要为这两个位置做一些路由。此外,我不知道是否应该这样做。

4

1 回答 1

1

最简单的 PHP 配置使用root由 location 块继承的通用指令,在您的情况下是:

root path;

这意味着/www/index.php/ajax/index.php都由location ~ \.php$块处理。

默认操作可以由块try_files内的指令定义location /

location / {
    try_files $uri $uri/ /www/index.php;
}

如果您需要对以 开头的 URI 使用不同的默认操作/ajax,请添加更具体的位置:

location /ajax {
    try_files $uri $uri/ /ajax/index.php;
}

如果您不希望您的媒体 URI 以/media您可以覆盖root一个特定位置的开头:

location ~* \.(js|png|jpg|css|ttf|xml)$ {
    root path/media;
}

fastcgi_split_path_infofastcgi_index指令在您的特定情况下是不必要的。该include fastcgi_params;语句应放在任何fastcgi_param指令之前,以避免后者被无意覆盖:

location ~ \.php$ {
    try_files $uri =404;
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

有关详细信息,请参阅nginx 文档

于 2016-03-19T14:21:28.117 回答