Php 子url yii框架的Nginx重定向404
我正在尝试使用nginx中的以下配置将404页重定向到我的主站点:Php 子url yii框架的Nginx重定向404,php,redirect,yii,nginx,http-status-code-404,Php,Redirect,Yii,Nginx,Http Status Code 404,我正在尝试使用nginx中的以下配置将404页重定向到我的主站点: server { listen 80; server_name localhost; root /var/www/mysite; include /etc/nginx/rewrite/*.conf; fastcgi_intercept_errors on; location / { try_files $uri $uri/ /index.ph
server {
listen 80;
server_name localhost;
root /var/www/mysite;
include /etc/nginx/rewrite/*.conf;
fastcgi_intercept_errors on;
location / {
try_files $uri $uri/ /index.php?$args ;
index index.php;
}
location ~ ^/(news|items)/? {
error_page 404 =301 @redirect;
}
location @redirect {
rewrite .* / permanent;
}
location ~ \.php$ {
fastcgi_pass unix:/tmp/php5-fpm.socket;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
与此配置一样,所有404页都重定向到/site
如何进一步调整此配置,以便只重定向子url上出现的404及其下线,并使用301例如/news//和/items/*,同时保持其他404不变
为了进一步说明:
要使用301重定向404,请执行以下操作:
/news/
/items/
要保留404作为其余部分,例如:
/
/posts
/images
/videos
更新:我根据梅尔文的建议修改了配置。它现在重定向以/news和/items开头的所有请求,而不管是否为404。我正在使用Yii-PHP框架。上面提到的文件夹没有物理位置,它们只是Yii的路由
更新2:找到了解决方案。查看下面我的答案。目前您在服务器级别设置了错误页面,但错误页面也在某个位置工作 因此,对于任何要覆盖默认行为的位置,只需添加一个位置并重新提供错误页面 不要害怕重复自己的话,使用nginx比使用复杂的正则表达式更可取 在您的情况下,您希望默认行为有所不同,因此只需从服务器级别删除该错误页面,并仅将其设置为/news/和/items/ 最后,由于目标是静态的,您可以使用:
error_page 404 =301 $scheme://$host/;
找到了解决此问题的方法。不确定这是否是一个好的实践,但如果您使用的是执行内部重定向的PHP框架,那么肯定值得一试 我添加了一个“if”语句,用于检查$request\u uri变量中我想要自定义404的变量
location ~ \.php$ {
fastcgi_pass unix:/tmp/php5-fpm.socket;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
if ($request_uri ~ ^/(news|items) {
error_page 404 =301 @redirect;
}
}
当然,下面的块被删除了
location ~ ^/(news|items)/? {
error_page 404 =301 @redirect;
}
通过这种方式,我可以重定向/news/和/items/下的所有404,而其他404由PHP默认错误处理程序处理。我删除了服务器范围的错误页面,并添加了位置~^/news | items/?{错误\第404页=301@redirect;}。它现在似乎可以重定向所有内容,而不管它是否是404。