1

OK、私は.htaccessファイルの書き換えルールに夢中です!

私の希望するシナリオは次のとおりです(http://doma.in/例としてURLを使用):

  • index.htmlまず、ファイルが/publicサブディレクトリに存在するかどうかを確認します。もしそうなら、それを提供します
    • そうでない場合; サーブ(リライト)index.php

私の例を拡張するために、次のURLをリクエストしたとしますhttp://doma.in/js/foobar.js

  • foobar.jsまず、ファイルが/public/jsサブディレクトリに存在するかどうかを確認します。もしそうなら、それを提供します
    • そうでない場合; サーブ(リライト)index.php?controller=js%2Ffoobar.js

それは静的ファイルをカバーしますが、私は次のようなURLも必要ですhttp://doma.in/foo

  • fooまず、ファイルが/publicサブディレクトリに存在するかどうかを確認します。もしそうなら、それを提供します
    • そうでない場合; サーブ(リライト)index.php?controller=foo

そしてURL http://doma.in/foo/bar

  • そのようにファイルに名前を付けることはできないため、ファイルはサブディレクトリに foo/bar存在しないと想定できます。/public
    • だから奉仕する(書き直す)index.php?controller=foo&action=bar

この複雑な(私にとって)ビットがカバーされていれば、クエリ文字列をその場で使用できると確信しています。だからhttp://doma.in/foo/bar/foo/bar役立つだろうindex.php?controller=foo&action=bar&querystring=foo%2Fbar

また、末尾のスラッシュが省略された場合と同じように処理されるようにしたいと思います。たとえば、次のようにhttp://doma.in/foo/bar/foo/barなります。http://doma.in/foo/bar/foo/bar/

ファイルが存在しないかのようにアプリ内から404を処理します。ファイルは存在するものにリダイレクトされindex.phpます。より良い解決策がない限り、これで満足しています:)

私はこのシナリオの解決策を一日中探していたので、これがすべて理にかなっていることを本当に望んでいます。これが私が持っているすべてです。

Options +FollowSymLinks

RewriteEngine on

RewriteBase /

#RewriteBase /prompt-v3/
#RewriteCond %{REQUEST_URI} ^/prompt-v3/(.*)$

RewriteCond $1 !^public
RewriteRule ^(.*)$ public/$1 [R]

コメントアウトされた行は、リモートホスト上にある場合のサブディレクトリを処理します。/publicこれまでのところ、ファイルがサブディレクトリに存在する場合はサブディレクトリにリダイレクトできます。

みなさん、ありがとうございました!

4

2 に答える 2

1
Options +FollowSymLinks

RewriteEngine on

RewriteBase /
#RewriteBase /sub-dir/
#RewriteCond %{REQUEST_URI} ^/sub-dir/(.*)$

RewriteRule ^index.html$ $1 [L,R=301]

RewriteCond $1 !^public
RewriteCond $1 !^lib
RewriteRule ^(.*)$ public/$1 [L]

RewriteCond $1 ^public/$
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteRule ^(.*)$ lib/bootstrap.php [L]

RewriteCond $1 !^public/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 ^public/(.*)$
RewriteRule ^(.*)$ lib/bootstrap.php?path=%1 [L]

これにより、パブリックディレクトリでindex.htmlファイルが検索され、存在しない場合は、URLをlib/bootstrap.phpに書き換えます。実際、最初にパブリックディレクトリ内の静的ファイルとしてリクエストをチェックし、正規化も処理します。

于 2012-08-01T13:30:13.443 に答える
0

この.htaccessをドキュメントルートに入れます

<ifModule mod_rewrite.c>
  RewriteEngine on

  # For /js/foobar.js (/js/*)
  RewriteRule ^js/(.*)$ /public/js/$1 [NC]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^public/(.*)$ index.php?controller=$1  [NC,L]

  # For foo/bar (/*/*?*)
  RewriteRule ^(.*)/(.*)$ /public/$1/$2 [NC]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^public/(.*)/(.*)$ index.php?controller=$1&action=$2&querystring=%{QUERY_STRING}  [NC,L]
</IfModule>
于 2012-07-20T06:39:08.167 に答える