Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nginx重写。PHP GET参数在子目录中时包含url的一部分_Php_Apache_.htaccess_Nginx_Url Rewriting - Fatal编程技术网

Nginx重写。PHP GET参数在子目录中时包含url的一部分

Nginx重写。PHP GET参数在子目录中时包含url的一部分,php,apache,.htaccess,nginx,url-rewriting,Php,Apache,.htaccess,Nginx,Url Rewriting,我的目录结构是这样的 index.php location / { rewrite ^(.*)$ /index.php?params=$1 last; } 公共/资产/ location /public/assets { rewrite ^(.*)$ /public/assets/index.php?params=$1 last; } 所以,我确实需要为这个项目重写2次,一次用于除资产之外的所有内容,另一次用于资产。但当使用Nginx

我的目录结构是这样的

index.php

location / {
        rewrite ^(.*)$ /index.php?params=$1 last;
    }
公共/资产/

    location /public/assets {
         rewrite ^(.*)$ /public/assets/index.php?params=$1 last;
    }
所以,我确实需要为这个项目重写2次,一次用于除资产之外的所有内容,另一次用于资产。但当使用Nginx时,问题就来了。使用Nginx重写public/assetsPHP$\u时,GET参数如下:

Array
(
    [params] => /public/assets/css/syles.css
)
Array
(
    [0] => 
    [1] => public
    [2] => assets
    [3] => css
    [4] => syles.css
)
这些都是错误的。我不希望传递url以获取。因为当使用Apache时,我得到了以下结果。使用Apache时,代码正常工作

Array
(
    [params] => css/styles.css
)
Array
(
    [0] => css
    [1] => styles.css
)
那么,如何使用Nginx config从url中删除这些“额外”参数呢?或者,如果webserver是Nginx,我是否需要使用PHP删除这些额外的参数?我甚至不希望这个解决方案被作为解决方案提出

所以,我希望使用Nginx获得与使用Aoache获得的相同的参数是干净的


仅供参考,在使用Apache时,我将以下.htaccess置于public/assets下

RewriteEngine on
RewriteCond %{REQUEST_URI} !/index.php
RewriteRule ^(.*)$ index.php/?params=$1 [NC] #L

重写之前的路径包含
/public/assets/
,因此从传递给
params
的内容中排除该路径的最简单方法是在regexp中对其进行硬编码,并仅提取所需内容,方法如下:

location /public/assets {
         rewrite ^/public/assets/(.*)$ /public/assets/index.php?params=$1 last;
    }