我有一段时间没遇到这个问题了,并且没有成功搜索到答案。
<img src="/images/test.jpg" />
从(根路径 - 在我的情况下在LAMP中的生产中)获取图像
htdocs/images/test.jpg
是否从htdocs / index.php或htdocs / foo / bar / index.php调用
我在开发中使用XAMPP,而htdocs内部有项目文件夹,所以上面描述的方法虽然可以在live时使用,但我需要将其改为:
<img src="/projectName/images/test.jpg" />
在本地工作时。
为了使这更简单,我定义了一个常量BASE,我在开发中使用:
define('BASE','/projectname/)
然后当它生效时我改为:
define('BASE','/')
<img src="<?php echo BASE;?>images/test.jpg" />
这显然很烦人,最终导致了几个问题。请有人了解这种情况,我特别想要做的是在我的图像/脚本源中使用根路径但是:
<img src="/images/test.jpg" />
从htdocs / projectName / foo / test.php
调用时在以下位置查找图片:
htdocs/projectName/images/
这可能吗?
答案 0 :(得分:5)
处理此问题的另一种方法是使用虚拟主机。
虚拟主机的作用类似于localhost的第二个版本,专门用于子文件夹。例如,您可以设置Apache,以便在您访问http://example
(无.com
或其他任何内容)时,它会显示http://localhost/example/
中的内容。所有CSS和JavaScript以及链接都会像在网站的根文件夹中操作一样,因为领先的example
文件夹已经从网址中删除了。
我找不到曾经用于XAMPP的a walkthrough,但这里有一个涵盖所有要点的类似的。它是为Windows编写的,但我想有一些类似的机制可以用于LAMP:
总结一下,这是文章告诉你的事情:
example
时,您会收到127.0.0.1
127.0.0.1
(但网站名称为example
)时,它会显示example
文件夹中的内容。这就是您的制作网站(具有多个网站的单个服务器)对每个网站都有不同的“根”。
答案 1 :(得分:3)
您是否考虑过html内容标题中的基本标记? http://www.w3schools.com/tags/tag_base.asp
<head>
...
<base href="<$path />">
...
</head>
获取基本路径:
$path = $_SERVER['SERVER_NAME'] == 'production.host' ? '/' : 'projectName';
答案 2 :(得分:2)
您可以尝试此线程中其他人提供的解决方案(编程解决方案),或者作为替代方案,我会做一些不同的事情(设置解决方案)。
对我来说,我喜欢创建一个独立的环境,我的项目和开发文件尽可能与XAMPP分开(我使用XAMPP,但原则适用于其他托管环境)。这使我可以轻松地为XAMPP安装新的更新,而不必担心我的项目,而且我也希望将我的所有项目都放在一个专门用于开发的文件夹中。此开发文件夹将包含用于Web,移动和其他环境的项目。
我设置它的方式是,我有一个c:\dev\
文件夹,其中包含我的项目列表,每个项目都是独立的。例如,c:\dev\project1\
,c:\dev\project2\
等等。
现在,在我为开发创建这些文件夹之后,我确保httpd-vhosts.conf
文件(位于c:\xampp\apache\conf\extra\
)和hosts
文件(位于c:\Windows\System32\drivers\etc\
)有正确的参考资料。
让我们假设我的一个项目被称为project1
。它通常位于c:\xampp\htdocs\project1
,然后我通常会通过浏览器访问http://localhost/project1
但是,为了拥有一个独立的环境,并且如前所述,我将在名为c:
的{{1}}驱动器中创建一个开发文件夹,然后我会将c:\dev
移入其中,最后得到project1
然后,要通过在网络浏览器中输入c:\dev\project1
来访问此项目,我附加了位于project1.dev
的{{1}}文件,如下所示:
httpd-vhosts.conf
另外,我必须更新c:\xampp\apache\conf\extra\
文件(位于<VirtualHost project1.dev:80>
ServerAdmin admin@project1.dev
DocumentRoot "C:/dev/project1"
ServerName project1.dev
ServerAlias www.project1.dev
ErrorLog "logs/project1.dev.error.log"
CustomLog "logs/project1.dev.access.log" combined
<Directory "C:/dev/project1">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
,并添加以下条目:
hosts
(其中127.0.0.1与 localhost 相同。另请注意,您必须在c:\Windows\System32\drivers\etc\
别名的127.0.0.1 project1.dev
127.0.0.1 www.project1.dev
文件中添加第二个条目。
这允许我以hosts
设置完成后,我现在可以为我的开发和生产环境一致地编写代码,并且我对root的引用也能正常工作。
此外,通过此设置,我不在乎我是否需要更新我的XAMPP或切换到LAMP或其他任何东西,我关心的只是确保我只处理一个文件,这是我的设置文件{{ 1}}。正如我所提到的,我总是希望有一个单独的文件夹进行开发,我可以在开发环境中使用不同类型的项目,例如移动项目,Web项目等等。
希望这有帮助。
如果您想设置多站点(子域设置),那么根据WordPress说明启用WordPress for multisite后,您必须执行以下操作:
假设您想要多站点的以下结构:
www
然后您必须将以下条目添加到http://project1.dev
httpd-vhosts.conf
并更新project1.dev
www.project1.dev (this is an alias to project1.dev)
sub.project1.dev (this is another setup, subdomain)
文件以包含
httpd-vhosts.conf
请注意,<VirtualHost sub.project1.dev:80>
ServerAdmin admin@project1.dev
DocumentRoot "C:/dev/project1"
ServerName sub.project1.dev
ErrorLog "logs/sub.project1.dev.error.log"
CustomLog "logs/sub.project1.dev.access.log" combined
<Directory "C:/dev/project1">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
指向主站点和子域站点的同一目录。
对您在WordPress网络中添加的每个新子域重复此过程。
答案 3 :(得分:1)
我认为最好的方法是使用baseurl,在配置中设置baseurl并将其用于外部文件。
$config = new Config();
public $baseurl = "http://dev050.nl";
您可以将其用作
$config->baseurl;
也许这对你来说很有趣: http://twig.sensiolabs.org/
希望它有所帮助。答案 4 :(得分:1)
如果对您有任何用处,我会在我的开发服务器和托管服务器之间切换数据库。没理由它不适用于基本URL。
// db connect
if($_SERVER['SERVER_NAME'] != "dev.mydomain.org"){
try{
$pdo = new PDO('mysql:host=mysql.***.net;dbname=***;charset=utf8', '***', '***');
}catch(PDOException $ex){
header('Location: error_db.php');
}
}else{
try{
$pdo = new PDO('mysql:host=localhost;dbname=***;charset=utf8', '***', '***');
}catch(PDOException $ex){
header('Location: error_db.php');
}
}
答案 5 :(得分:0)
一种可能的解决方案是使用mod_rewrite自动更改开发服务器上的路径
RewriteCond %{HTTP_REFERER} ^https?://localhost/testsite/
RewriteCond %{REQUEST_URI} \.(jpg|gif|png|bmp)$
RewriteRule ^ /testsite/$1
我相信上面的mod_rewrite规则是正确的,但最好自己验证一下。