V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
h2sky
V2EX  ›  问与答

nginx 如何重写“A.php(虚)“到”B.php(实)”?避免A.php被fastcgi解析为404

  •  
  •   h2sky · 2013-12-15 17:16:28 +08:00 · 2722 次点击
    这是一个创建于 3792 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需要重写./php/文件夹下的1.php 到index.php

    因为location ~ .*\.php$ 全部交给fastcgi了,会显示404 无法重写
    在location ~ .*\.php$ 前重写规则 php又无法解析


    怎么办?

    location ~ .*\.php$
    {
    fastcgi_pass unix:/tmp/php-cgi-f.sock;
    fastcgi_index index.php;
    include fcgi-host.conf;
    fastcgi_param DOCUMENT_ROOT /web$subdomain;
    fastcgi_param SCRIPT_FILENAME /web$subdomain$fastcgi_script_name;
    }

    location ~ ^/ {

    rewrite ^/php/([0-1000]+).php$ /php/index.php?id=2&cid=$1&num=$args last;

    }

    (不直接写入到php里面而重写有各种原因,只求用nginx解决这个问题)
    7 条回复    1970-01-01 08:00:00 +08:00
    tempdban
        1
    tempdban  
       2013-12-15 17:25:14 +08:00 via Android
    location ^~ /php/

    放在最前面
    h2sky
        2
    h2sky  
    OP
       2013-12-15 17:28:37 +08:00
    @tempdban php会不解析
    hitsmaxft
        3
    hitsmaxft  
       2013-12-15 19:39:10 +08:00   ❤️ 1
    每个location是相互独立的, 意味着 ^/ 下虽然已经成功完成了rewrite, 但是这个location下并没有 fastcgi 配置, 所以会返回代码文本

    解决方法就是吧 fastcgi相关配置复制到 ^/ 内部
    建议用include解决fastcgi 配置重复的问题

    还有一个方法, 在location 之前加一个 if rewrite , 在locaiton 区块之外完成内部的url重定向
    dallaslu
        4
    dallaslu  
       2013-12-15 19:41:33 +08:00
    [0-1000] 正则可以这样写吗?为什么我的第一反应是不应该这么写的呢
    hitsmaxft
        5
    hitsmaxft  
       2013-12-15 19:41:39 +08:00   ❤️ 1
    再提供一份合理的配置指南 http://huoding.com/2013/10/23/290

    用 try_file 解决不必要的404
    dallaslu
        6
    dallaslu  
       2013-12-15 19:44:34 +08:00
    比如 "\d+"、"\d{1,4}"、"[1-9]?\d+"、"1?[1-9]?\d{2}",我感觉这样才是对的
    h2sky
        7
    h2sky  
    OP
       2013-12-15 20:24:16 +08:00
    @hitsmaxft 感谢指导,问题终于解决了


    @dallaslu 可以的,nginx、apache 下都能用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   828 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:30 · PVG 06:30 · LAX 15:30 · JFK 18:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.