问题描述
|
我的mod_rewrite代码是:
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)?$ index.PHP?url=$1 [L,NC]
此结构位于我的服务器路径/beta
上
当我放置URLhttp://mydomain.com/beta/download
时,所有内容都将重写为真实路径http://mydomain.com/beta/index.PHP?url=download
问题发生在相对路径上。当我输入URLhttp://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>