mod_rewrite VS相对path

我的mod_rewrite代码是:

Options +FollowSymLinks Options +Indexes RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)?$ index.php?url=$1 [L,NC] 

这个结构放在我的服务器path/beta

当我把URL http://mydomain.com/beta/download一切工作重写到真正的pathhttp://mydomain.com/beta/index.php?url=download

问题发生在相对path上。 当我inputURL http://mydomain.com/beta/download/box重写到http://mydomain.com/beta/index.php?url=download/box …但….

我所有的相对path,如我的CSS文件夹,我的JS文件夹,图像文件….在我的index.php页面相对path的一切崩溃,因为我的相对path变成download/cssdownload/jsdownload/images ..等…

我知道这个问题发生在path“下载/”的斜线的原因,但我怎样才能解决这个问题,在.htaccess中使用mod_rewrite?

我可以防止重写相对path? 甚至在我自己的域名的内部path?

我怎样才能解决这个问题,而不改变我的绝对path的相对path?

谢谢

添加<base href="yoururl.com/beta/"; /> <base href="yoururl.com/beta/"; />标记到你的HTML头上。 如果你在子文件夹中,也可以添加RewriteBase / beta /到htaccess

你应该总是使用绝对路径的图像CSS等,当玩mod_rewrite,但简单的解决方案可能是忽略CSS,JS,图像和休息在RewriteRule ^(.+)?$ index.php?url=$1 [L,NC]

 RewriteRule ((js|css|images)\/.*)$ /$1 [L,NC] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)?$ index.php?url=$1 [L,NC] 

然而,如果这些目标实际上取决于当前的url,这可能不起作用

我已经测试了标签,并且没有必要指出http://下面的代码适用于我:

 <base href="<?php echo dirname($_SERVER['PHP_SELF']);?>/" /> 

服务器不会知道请求是通过相对路径还是绝对路径传递的,所以你可以做任何事情。 正如另一个答案所述,你可以例外,但保持所有这些将成为PITA在某些时候。 ;)

我总是使用绝对路径,特别是在重写时,我建议这样做,这是最简单的方法

添加行:

 <BASE href="http://www.sitename.com/"> 

到我的页面里<head>标签对我来说很好用。 它甚至可以被编码为一个PHP函数来自动化,所以你不必在其他场合复制/粘贴。

更新:

 <?php $BaseDir = 'http://'.$_SERVER['SERVER_NAME'].substr($_SERVER["SCRIPT_NAME"], 0, strrpos($_SERVER["SCRIPT_NAME"],"/")+1); ?> <head> ... <BASE href="<?php echo $BaseDir; ?>"> ... </head>