PHP 函数 file_exists 在使用 .htaccess 重写规则时不起作用

PHP function file_exists not working when using .htaccess rewrite rule

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

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

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

这会改变 url

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

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

我所有的内容都放在

/www/foldername/

我通过声明一个值为 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="">

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

这是什么意思?

var_dump('uploads/image.jpg');

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

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

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

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

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