Php 重定向到另一个目录
我的网站几乎已经启动并运行,但在原始代码中有,例如Php 重定向到另一个目录,php,html,.htaccess,Php,Html,.htaccess,我的网站几乎已经启动并运行,但在原始代码中有,例如imgsrc=“/design/pic1.png”等等。在真正的服务器上,有一个must dir,web,因此新路径应该是img src=“web/design/pic1.png”,但我不想重写所有路径。 还有其他选择吗?根据您的设置,一种方法是使用一个常数来指示您的基本路径,这取决于您的环境 例如,假设在您的开发环境中,您乐于将所有图像放在$WEB\u ROOT中。“/design/”,但在您的生产环境中它是$WEB\u ROOT。“/web/
imgsrc=“/design/pic1.png”
等等。在真正的服务器上,有一个must dir,web
,因此新路径应该是img src=“web/design/pic1.png”
,但我不想重写所有路径。
还有其他选择吗?根据您的设置,一种方法是使用一个常数来指示您的基本路径,这取决于您的环境 例如,假设在您的开发环境中,您乐于将所有图像放在
$WEB\u ROOT中。“/design/”
,但在您的生产环境中它是$WEB\u ROOT。“/web/design/”
,那么您可能会得到如下结果:
<?php
// initialise stuff for development
if(ENVIRONMENT == ENV_DEV) {
define("BASE_PATH", "/");
// initialise stuff for production
} elseif(ENVIRONMENT == ENV_PROD) {
define("BASE_PATH", "/web");
}
?>
在本例中,您如何决定什么是ENV_DEV
和ENV_PROD
,完全取决于您自己
一种方法是基于域检测它(使用$\u SERVER['HTTP\u HOST']
,这是一种有效的方法)
另一种方法是在web配置中对此进行初始化。假设您使用的是Apache2,那么可以使用SetEnv
指令
在您的httpd.conf
中:
SetEnv MY_ENVIRONMENT DEV
您可以使用以下方式在PHP中访问:
<?php
$_SERVER['MY_ENVIRONMENT'];
// or...
getenv("MY_ENVIRONMENT");
?>
根据您的设置,一种方法是使用一个常数来指示您的基本路径,这取决于您的环境 例如,假设在您的开发环境中,您乐于将所有图像放在
$WEB\u ROOT中。“/design/”
,但在您的生产环境中它是$WEB\u ROOT。“/web/design/”
,那么您可能会得到如下结果:
<?php
// initialise stuff for development
if(ENVIRONMENT == ENV_DEV) {
define("BASE_PATH", "/");
// initialise stuff for production
} elseif(ENVIRONMENT == ENV_PROD) {
define("BASE_PATH", "/web");
}
?>
在本例中,您如何决定什么是ENV_DEV
和ENV_PROD
,完全取决于您自己
一种方法是基于域检测它(使用$\u SERVER['HTTP\u HOST']
,这是一种有效的方法)
另一种方法是在web配置中对此进行初始化。假设您使用的是Apache2,那么可以使用SetEnv
指令
在您的httpd.conf
中:
SetEnv MY_ENVIRONMENT DEV
您可以使用以下方式在PHP中访问:
<?php
$_SERVER['MY_ENVIRONMENT'];
// or...
getenv("MY_ENVIRONMENT");
?>
即使您让服务器将所有这些路径重写到较新版本,这也只是一个临时修复,您不应该仅仅因为不想去更改它们而引用不存在的路径。做正确的事情,使用一个好的编辑器,它可以用正则表达式进行搜索和替换,只需用正确的路径替换路径即可。(另外,我觉得奇怪的是,在你的网站目录中,你有一个“web”文件夹对我来说似乎是多余的。)即使你让服务器将所有这些路径重写到新版本,那应该只是一个临时修复,你不应该仅仅因为不想去更改它们而引用不存在的路径。做正确的事情,使用一个好的编辑器,它可以用正则表达式进行搜索和替换,只需用正确的路径替换路径即可。(另外,我觉得奇怪的是,在你网站的目录中,你有一个“web”文件夹,这对我来说似乎是多余的。)那太好了,那么.css文件中的文件呢?这是一个棘手的问题。我倾向于将与CSS文件相关的图像放置在CSS目录中。因此,如果我有$WEB\u ROOT/css/style.css
,我将创建$WEB\u ROOT/css/images/
,然后用相对路径引用css中的图像,例如images/foo.png
,而不是/something/css/images/foo.png
。或者,如果你知道你的CSS目录总是离你的web根目录一级远,你可以做。/images/foo.png
。这很好,那么.CSS文件中的文件呢?这是一个棘手的问题。我倾向于将与CSS文件相关的图像放置在CSS目录中。因此,如果我有$WEB\u ROOT/css/style.css
,我将创建$WEB\u ROOT/css/images/
,然后用相对路径引用css中的图像,例如images/foo.png
,而不是/something/css/images/foo.png
。或者,如果您知道您的CSS目录总是离您的web根目录一级,您可以执行。/images/foo.png
。