请帮我配置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;
...
}