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
到
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)
在
但没有用。而且我不想使用 <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()
,但也许你已经意识到了这一点。
我在我的 .htaccess 文件中使用以下内容
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^shopping-bag/?$ shoppingbag.php [L,QSA]
这会改变 url
到
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)
在
但没有用。而且我不想使用 <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()
,但也许你已经意识到了这一点。