【问题标题】:Redirecting somehow added a trailing slash重定向以某种方式添加了斜杠
【发布时间】:2019-01-19 21:12:58
【问题描述】:

POST 之后使用header('Location:employees');exit; 后,不知何故我被重定向到localhost/project_name/employees/。即使我的<a> 只指向employees

<a href="employees" role="button" class="col-1 my-1 mr-1 btn btn-outline-primary btn-sm">Employee</a>

我总是被重定向到employees/。这不会发生在其他链接上,如果我使用employee,我会被正确重定向,不会添加尾部斜杠。我怀疑是因为我的.htaccess,但不影响其他链接。

这是我的.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

即使我删除了内容,它仍然会在employees 中添加一个斜杠。我已经尝试清除浏览器的数据并在另一个浏览器中打开它(Microsoft Edge),仍然是相同的结果。

我尝试用答案here 更新htaccess,但仍然没有成功

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

我也试过清空employees.php的所有内容,看看是不是因为我的代码,问题依旧。

如何防止这种情况发生在其他链接上?我似乎无法扭转它,我设法找到的解决方案就是更改名称。虽然不是问题,但我想知道这是什么原因。

【问题讨论】:

    标签: php .htaccess redirect mod-rewrite xampp


    【解决方案1】:

    你能试试这个.htaccess吗:(先备份你的.htaccess,然后用这些行覆盖它)

    RewriteEngine On    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /project_name/$1 [L,R]
    

    我刚刚在我的服务器上测试了它,它可以工作!

    【讨论】:

    • 错误从找不到对象禁止访问
    • 检查更新的代码,备份后覆盖您的 .htaccess。
    • 好吧,我现在无法打开链接,因为他们现在正在寻找 .php 扩展名。而关于employees,它仍然被重定向到employees/。我注意到的一件事是,不知何故,已经创建了一个名为 employees 的文件夹
    • 等等,我实际上被重定向到 localhost/employees 而不是 localhost/project_name/employees。我尝试使用/$1.php而不是/$1,它变成了localhost/employees.php,而其他链接在重定向时没有.php扩展
    【解决方案2】:

    将我的 cmets 转换为答案。

    所显示的规则都不会添加尾部斜杠。这可能是由于某些代码或 Apache 服务器指令造成的。

    要验证这一点,请在 Chrome 开发工具中使用 缓存禁用 进行测试,然后在“网络”选项卡中检查它在此处显示的 3xx/4xx URL 是什么。

    另外需要注意的是,如果你的 URI 指向一个真实的目录,那么 Apache 的 mod_dir 模块会添加一个尾随目录,并出于安全原因向客户端发送一个 301

    【讨论】:

      猜你喜欢
      • 2017-08-16
      • 1970-01-01
      • 2015-06-24
      • 2012-03-09
      • 2016-02-18
      • 1970-01-01
      • 2014-11-03
      • 2021-12-30
      • 2013-11-25
      相关资源
      最近更新 更多