$_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区别