我的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/css
, download/js
, download/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>