1

我不知道这样的事情是否可行,但让我们试一试。在过去(三年多前),我在一个 MVC 教程中了解了这样的解决方案(不知道它到底是怎么回事)。

目录结构

  • 网络根/
    • 包括/
    • 配置/
    • 上市/
      • 图片/
      • js/
      • css/
      • 索引.php
    • 初始化文件

我想做的是

当用户访问http://www.mysite.com/a/b/c/时,将所有请求重定向到/public/index.php页面。即,对网站的所有请求都将通过页面,/public/index.php除了和目录,它们位于.images/js/css/public/

此外,http://www.mysite.com/includes/将重定向到index.php页面,并获取includes/$query.

Index.php 页面

<?php

// get init file from webroot directory, which will load all required php files.
define ('ROOT', dirname(dirname(__FILE__)));
require_once (ROOT . 'init.php');


// get query from url (here, $query = "a/b/c/")
if(isset($_GET['q'])) {
    $query = $_GET['q'];
}

// insert images, css etc. resource
echo "<img src='http://www.mysite.com/images/foo.jpg' />";
echo "<script src='http://www.mysite.com/js/bar.js'></script>";

?>

这对于使用 web 托管的人很有用,它不提供对 webroot 的一步目录访问。

编辑

好的,我找到了我得到这个概念的网站。查看根目录和公共目录中使用的两个 .htaccess 文件。链接到 MVC 教程

4

2 回答 2

3

我假设 .htaccess 在WebRoot.

要重写所有请求,您只需使用RewriteRule. 当你想排除一些路径时,你使用一个或多个RewriteCond

RewriteEngine on
RewriteCond %{REQUEST_URI} !/images/
RewriteCond %{REQUEST_URI} !/css/
RewriteCond %{REQUEST_URI} !/js/
RewriteCond %{REQUEST_URI} !/public/index\.php
RewriteRule .* public/index.php?q=$0 [L,QSA]

RewriteRule ^images/.+ public/$0 [L]
RewriteRule ^js/.+ public/$0 [L]
RewriteRule ^css/.+ public/$0 [L]

该标志QSA将任何其他现有查询字符串作为参数附加到index.php. 如果您不想附加任何现有的查询字符串,只需保留该QSA标志即可。

如果您希望重写对客户端可见,则必须将R标志添加到RewriteRule, 即[R,L,QSA][R,L].

于 2013-03-18T07:11:59.173 回答
1

您可以使用其他技巧,您的页面不会重定向到另一个页面,但您会限制其他用户查看目录索引

Options -Indexes

在您的文件中添加此文本.htaccess,它将生成 403 错误(禁止)

于 2013-03-18T07:15:56.007 回答