URL 重写 HTML 和 CSS 路径


Url rewriting HTML and CSS paths

我的应用程序根目录中有以下.htaccess文件:

RewriteEngine On
RewriteRule '.(css|jpe?g|gif|png|js|ico)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

这基本上只是将诸如index/var=value/var2=values2/之类的路径转换为index?url=index/var=value/var2=values2/并在索引中.php它们被精心设计为获取$controller这是称为控制器的名称(在本例中为index(和$get,它是$_GET的替代品。(在这种情况下,它包含:$get['var'] = 'value' e $get['var2'] = 'value2' (。

注意:在.htacces文件和索引所在的根文件中.php我们还有application/文件夹(包含控制器,视图和模型(,初始化框架的system/文件夹和public/文件夹,该文件夹应包含可以访问的每个图像/javascript/css/视频/音频文件。

.htaccess允许我直接访问每个现有文件,包括图像和css。这很好。发生的唯一问题是当该图像/javascript/css/audio/video 文件的路径位于 HTML 或 CSS 文件中时。因此,当您呼叫(*1(<img src="public/img/image.jpg"/>或呼叫(*2 background-image: url(public/img/image.jpg);(

时,它不起作用。

这可以使用绝对路径(例如http://dominio.com/public/img/image.jpg("解决",但是当涉及到javascript文件时,这很棘手。无论如何,根本不是解决方案,而只是绕过问题的一种方式。

如何使 (*1( 和 (*2( 工作?

你试过这条路吗?

/public/img/image.jpg

编辑/添加

没有测试这个,但你可以试试

RewriteCond %{REQUEST_URI} ^/public        [OR]
RewriteCond %{REQUEST_URI} ^/other_folder  [OR]
RewriteCond %{REQUEST_URI} ^/more_folders
    RewriteRule (.*) /project/$1

或者,有索引.php处理所有内容,并且第一行是根据当前路径检查被调用的文件是否存在:

//untested code
$url = str_replace('..','',$_GET['url']);
if(file_exists(dirname(__FILE__).'/'.$url)){
   //redirect to that file or serve it with PHP
   exit(0);
}
background-image: url(public/img/image.jpg); 

将查找相对于 CSS 文件的路径public/img

您可能应该使用的是../img/image.jpg/public/img/image.jpg