$_SERVER['REQUEST_URI'] 在实时站点中不起作用

Posted

技术标签:

【中文标题】$_SERVER[\'REQUEST_URI\'] 在实时站点中不起作用【英文标题】:$_SERVER['REQUEST_URI'] not working in live site$_SERVER['REQUEST_URI'] 在实时站点中不起作用 【发布时间】:2017-11-30 05:01:18 【问题描述】:

我的 codeigniter 站点中有一个用于更改密码的弹出窗口。我可以从任何页面打开这个窗口。因此,更改密码完成后,它将重定向到同一页面。要重定向,我使用$_SERVER['REQUEST_URI']。我将其设置在隐藏字段中并以表单提交的形式发送到服务器。 这是我的代码:HTML:

<div class="modal-content">
    <span class="modalclose" data-dismiss="modal"></span>
    <h2 class="head edit">Change Password</h2>          
    <form action="<?php echo base_url()?>Home/changePassword" method="post">
        <div class="field-wrap">                
            <input type="password" placeholder="Enter current Password" name="changePasswordCurrent" id="changePasswordCurrent" autocomplete="off">
            <span id="changePasswordCurrentError" class="validation-cls rt"></span>
        </div>

        <div class="field-wrap">                
            <input type="password" placeholder="Enter new Password" name="changePasswordNew" id="changePasswordNew" autocomplete="off">
            <span id="changePasswordNewError" class="validation-cls rt"></span>
        </div>

        <div class="field-wrap">                
            <input type="password" placeholder="Confirm Password" name="changePasswordConfirm" id="changePasswordConfirm" autocomplete="off">
            <span id="changePasswordConfirmError" class="validation-cls rt"></span>
        </div>

        <div class="field-wrap">     
            <input type="hidden" name="requestURI" value="<?php echo $_SERVER['REQUEST_URI']?>" />
            <button class="fill" id="saveNewPassword" type="submit">Save</button>
        </div>
    </form>

</div>

控制器:Home.php

public function changePassword() 
    if($this->session->userdata('UserID') != '')
        $data = $this->input->post();  
        $result = $this->Home_model->changePassword($data);
        redirect($data['requestURI']);
    
    else 
        redirect('../');
            

此代码在我的本地服务器中有效,但在实时站点中无效。 第一次尝试更改密码是有效的,但它会将index.php 添加到 url 作为http://example.com/index.php 因此,如果我再次尝试更改密码,重定向将不起作用,因为它会将 index.php 再次添加到 url,例如 http://example.com/index.php/index.php 此问题仅存在于实时站点中。

【问题讨论】:

试试redirect(base_url($data['requestURI'])); 您能否 print_r($_SERVER) 查看您的活动站点中是否有 REQUEST_URI。 @Aggarat ,我现在无法测试它,因为它已经存在 @Yahiya 我现在无法使用实时站点进行测试。但它在本地服务器中不起作用,它的重复项目名称 ex。 http://myip:8080/SMS/approve-cost改为http://myip:8080/SMS/SMS/approve-cost# @geeth 当然你可以在现场测试它。只需创建一个新文件 - 将其命名为 test.php - 在其中 var_dump($_SERVER);并直接调用它 - domainname.com/test.php 并查看结果。完成后 - 删除文件 【参考方案1】:

首先加载url helper(如果没有加载)

$this->load->helper('url');
 $currentURL = current_url(); //http://example.com/controller

从您的控制器传递$currentUrl。 如果您有任何查询字符串。 找出查询字符串

$params   = $_SERVER['QUERY_STRING']; //my_id=1,3

$fullURL = $currentURL . '?' . $params; 

echo $fullURL;   //http://myhost/main?my_id=1,3

【讨论】:

以上是关于$_SERVER['REQUEST_URI'] 在实时站点中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

PHP_$_SERVER中QUERY_STRING,REQUEST_URI的用法

当虚拟主机下获取不到$_SERVER['REQUEST_URI']时,的解决方案

如何使用 strpos($_SERVER['REQUEST_URI'] 从 url 段生成活动类

详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别

转载详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别

解决在 Nginx 下报 Notice: Undefined index: REQUEST_URI