Ngin,url:/search => 运行 php /search.php,以及 url:/my => php my.php

Ngin,url:/search => 运行 php /search.php,以及 url:/my => php my.php

请帮我配置Nginx:

1) 我有许多 php 脚本,我想运行不带“.php”的 URL。例如

  • url /search->运行脚本“/search.php”
  • url /bookmark -> 运行脚本“/bookmarks.php”
  • url /-> 运行脚本“/index.php”

2) 404 /asdfasdfasdf - 任何与指定位置不匹配且不指向静态文件(图像、css)的 URL 都应运行 /not-found.php 并在 URL 中保留 /asdfasdfasdf

当前服务器部分根 /var/www/site/public;索引 index.php;

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;         
}

location ~ \.(ico|css|js|jpe?g|png)$ {
    expires 7d;
    add_header Pragma public;
    add_header Cache-Control "public,  must-revalidate, proxy-revalidate";
}

答案1

我使用重写来实现这一点

location /abcd {
  rewrite ^/abcd\/([0-9a-zA-Z_\-\s\+]+)\/([0-9a-zA-Z_\-\s\+\(\)\.]+)$ /efgh.php?action=whatever;
}
location /xyz {
  rewrite ^/yxz\/([0-9a-zA-Z_\-\s\+]+)$ /rst.php?action=whatever;
}

可能还有更通用的方法,但如果您的 URL 数量有限,这种方法可能有效。这可能会让您走上正轨。我可能会看看正则表达式、捕获组和表达式。

答案2

实现无扩展 PHP 有一些常见模式。其中一种模式如下:

index index.php;

location / {
    try_files $uri $uri/ @php;
}
location @php {
    rewrite ^ $uri.php last;
}
location ~ \.php$ {
    try_files $uri =404;
    ...
}

相关内容