1

そのようなことが可能かどうかはわかりませんが、試してみましょう。過去(3年以上前)に、あるMVCチュートリアルで、このようなソリューションについて知るようになりました(正確にはわかりません)。

ディレクトリ構造

  • WebRoot /
    • 含む/
    • config /
    • 公衆/
      • 画像/
      • js /
      • css /
      • index.php
    • init.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>";

?>

これは、webrootへのワンステップアップディレクトリアクセスを提供しないweb-hostingを使用しているユーザーにとって便利です。

編集

OK、このコンセプトを思いついたサイトを見つけました。ルートディレクトリとパブリックディレクトリで使用される2つの.htaccessファイルを参照してください。MVCチュートリアルへのリンク

4

2 に答える 2

3

.htaccessはにあると思いWebRootます。

すべてのリクエストを書き換えるには、を使用するだけRewriteRuleです。一部のパスを除外する場合は、1つ以上を使用します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 に答える