【问题标题】:PHP function file_exists not working when using .htaccess rewrite rule使用 .htaccess 重写规则时 PHP 函数 file_exists 不起作用
【发布时间】:2017-02-21 11:22:18
【问题描述】:

我在我的 .htaccess 文件中使用以下内容

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^shopping-bag/?$ shoppingbag.php [L,QSA]

这会改变网址

http://www.domain.com/foldername/shoppingbag.php

www.domain.com/foldername/shopping-bag/

我所有的内容都放在了

/www/文件夹名/

我通过声明一个值为 http://www.domain.com/foldername/ 的全局变量来修复所有 css 和 js 文件,并将此变量放在 css 和 js 文件的路径之前。由于 file_exists 不适用于 URL,我尝试执行以下操作

../uploads/image.jpg

图片文件的实际路径是

/www/foldername/uploads/image.jpg

我试过了

var_dump(../uploads/image.jpg)

http://www.domain.com/foldername/shopping-bag/

但是没有用。而且我不想使用<base href="">

【问题讨论】:

  • <base href="http://www.domain.com/foldername/"> 呢?
  • 我认为那部分没有代码标签。我不想使用基本 href
  • I fixed all the css 也不是最好的方法,但这只是我的评论:)
  • 哦,对不起,我不是故意冒犯你的。我只是说我不想使用 base href 是因为我遇到了一些问题
  • 在禁用缓存的情况下在 Chrome 开发工具中进行测试,并在“网络”选项卡中检查您为 css/js/images 获得的 404 URL 是什么。

标签: php .htaccess mod-rewrite file-exists


【解决方案1】:

除非您使用 chdir( $someDir ) 之类的东西更改了 PHP 的当前工作目录,否则所有文件系统函数的行为基本上都应相对于当前脚本的目录。

在您的情况下,file_exists( 'uploads/image.jpg' )file_exists( './uploads/image.jpg' )(注意单点,表示当前目录)因此应返回 true,如果文件实际存在于您所说的位置。

注意<base href=""> 与PHP 脚本无关,因为PHP 是一种服务器端 语言,而<base> 是一种客户端 HTML 元素。

要更好地了解服务器端和客户端(编程)之间的区别,请查看this answer,例如。

此外,除非您打算展示不同的东西,否则var_dump(../uploads/image.jpg) 不会输出任何有意义的东西。你不能像那样使用var_dump(),但也许你已经意识到了这一点。

【讨论】:

    【解决方案2】:

    foldername/shoppingbag.php 是您正在运行的文件,foldername/uploads/image.jpg 是它感兴趣的文件。相对路径应该是 uploads/image.jpg

    这有什么作用?

    var_dump('uploads/image.jpg');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多