mod_rewrite VS相对路径

问题描述

| 我的mod_rewrite代码是:
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)?$ index.PHP?url=$1 [L,NC]
此结构位于我的服务器路径
/beta
上 当我放置URL
http://mydomain.com/beta/download
时,所有内容都将重写为真实路径
http://mydomain.com/beta/index.PHP?url=download
问题发生在相对路径上。当我输入URL
http://mydomain.com/beta/download/Box
时,重写将转到
http://mydomain.com/beta/index.PHP?url=download/Box
...但是... 我所有的相对路径,例如css文件夹,js文件夹,图像文件...。index.PHP页面中所有具有相对路径的东西都崩溃了,因为我的相对路径变成了relative6ѭ,
download/js
download/images
...等等... 我知道此问题是由于路径“下载/ \”中的斜线而发生的,但是如何使用.htaccess中的mod_rewrite解决该问题? 我可以防止在相对路径中重写吗?甚至在我自己域的内部路径中? 如何在不将相对路径更改为绝对路径的情况下解决该问题? 谢谢     

解决方法

        在您的HTML标题中添加一个“ 9”标签。如果您在该子文件夹中,请将RewriteBase / beta /添加到htaccess中     ,        在使用mod_rewrite时,应始终对图像css等使用绝对路径,但简单的解决方案可能是忽略css,js,图像并在ѭ10中休息
RewriteRule ((js|css|images)\\/.*)$ /$1 [L,NC]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)?$ index.php?url=$1 [L,NC]
但是,如果这些目录实际上取决于当前网址,则可能无法正常工作     ,        我已经测试了该标记,因此无需指出http://以下代码对我有用:
<base href=\"<?php echo dirname($_SERVER[\'PHP_SELF\']);?>/\" />
    ,        服务器永远不会知道请求是通过相对路径还是绝对路径发出的,因此您无能为力。如另一个答案中所述,您可以设置例外,但是维护所有例外等将在某个时候成为PITA。 ;) 我总是使用绝对路径,尤其是在重写时,所以我建议,这是最简单的方法     ,        添加行:
<BASE href=\"http://www.sitename.com/\">
my14ѭ标签内的页面对我来说非常有用。它甚至可以被编码为PHP函数来自动执行此操作,因此您不必在其他情况下麻烦复制/粘贴。 更新:
<?php
$BaseDir = \'http://\'.$_SERVER[\'SERVER_NAME\'].substr($_SERVER[\"SCRIPT_NAME\"],strrpos($_SERVER[\"SCRIPT_NAME\"],\"/\")+1);
?>

<head>
...
<BASE href=\"<?php echo $BaseDir; ?>\">
...
</head>