Apache服务器上的相对路径等

时间:2011-01-03 21:02:59

标签: php apache mod-rewrite relative-path

我真的被困在这里。

我一次有2个问题:

首先,我的网站存储在本地开发和实时服务器上,位于子目录中......因为我正在多个站点上工作。即。

/Sites/www.mysite.com/(site files here)

当我在网页中引用文件时,我想引用我的/images目录而不将每次出现的硬编码都称为/www.mysite.com/images/myfile.jpg

有没有办法简单地重新定义服务器如何解释前导“/”?

关于PHP mod_rewrite的问题二

我有这套重写规则。目标是将www.mysite.com/faq变成www.mysite.com/index.php?page="faq“

RewriteEngine On
RewriteCond %{REQUEST_URI} !mysite.com
RewriteRule (.*) mysite.com/$1
RewriteRule ^([a-zA-Z0-9_-]+)$ /mysite.com/index.php?site=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ /mysite.com/index.php?site=$1

当网址以倒数第二种格式传递时,我没有问题(如上例所示)。但是,如果添加了尾部“/”:www.mysite.com/faq/,我的外部脚本会引用break :(例如src=js/script.js)...

2 个答案:

答案 0 :(得分:2)

质疑没有。 1:

Apache正在根据DocumentRootAlias

解释前导斜杠

因此,如果您想让自己的生活更轻松,请使用此

创建VirtualServer
DocumentRoot "/Sites/www.mysite.com"

Apache documentation: DocumentRoot

Alias

Alias /mysite /Sites/www.mysite.com

Apache documentation: Alias

或使用路径相对寻址。

问题2:

RewriteEngine On
RewriteCond %{REQUEST_URI} !mysite.com
RewriteRule (.*) mysite.com/$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)$ /mysite.com/index.php?site=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/$ /mysite.com/index.php?site=$1 [L]

根据netcoder建议。

答案 1 :(得分:1)

问题1:不要使用前导斜杠,路径将相对于调用脚本的文件位置。

所以如果调用脚本在目录

/www.mysite.com/myscript.php

并在

脚本中使用文件路径

图像/ myfile.jpg

这应该适用于您正在做的事情,并导致

/www.mysite.com/images/myfile.jpg