某些REQUEST_URI

时间:2015-11-10 05:49:43

标签: php apache .htaccess mod-rewrite

我有这样的文件结构:

ROOT
|----app/
|----app/init.php
|----public/
|----public/index.php
|----public/img/
|----public/js/
|----.htaccess

.htaccess的规则会将所有REQUEST_URI重定向到app/init.php

RewriteCond %{REQUEST_URI} !\.(css|js|ttf|woff|woff2|eot|otf|svg|png|jpg)$
RewriteCond public/%{REQUEST_FILENAME} !-f
RewriteCond public/%{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*)$ app/init.php [NC,L,QSA]

然后app/init.php将使用require_once.html/.php文件夹中获取相应的public

这很好用; .htaccess中所有被排除的文件将在public/...中被称为public/index.php路径模式。

例如:

  1. CSS <link rel="stylesheet" href="public/css/layout.css">
  2. 图片<img src="public/img/abc.jpg" alt="">
  3. 但是,我不想在public/

    中排除的所有文件上添加.htaccess前缀

    我尝试添加

    RewriteCond %{REQUEST_URI} \.(jpg)$
    RewriteRule ^([^?]*)$ public/$1 [NC]
    

    然而,它不起作用。更准确地说,当我在img/abc.jpg文件中调用此public/index.php时,它反馈的是500(内部服务器错误)。我猜测重定向有问题,但我不确定。

    问题:如何在路径中调用cssimg等等。{/ p>前缀为public/的文件?

1 个答案:

答案 0 :(得分:0)

在你的root中以这种方式.htaccess:

RewriteEngine On

# handle css, js and img files
RewriteRule (?:^|/)((?:img|css|js)/.+) public/$1 [L,NC]

# handle rest of the files
RewriteCond public/%{REQUEST_FILENAME} !-f
RewriteCond public/%{REQUEST_FILENAME} !-d
RewriteRule !^public/ app/init.php [L,NC]