0

これは私のディレクトリです:

root/
├── app/
├── public/
|       ├── css/
|       ├── img/
|       ├── index.php
|       ├── .htaccess
├── .htaccess

フォルダーへのすべてのリクエストをroot/フォルダーに書き換えてから、変数を介してpublic/url を渡します。 これは私のです:index.php$_GET
root/.htaccess

DirectorySlash off
RewriteEngine on
RewriteRule (.*) public/$1

これは私のroot/public/.htaccessです:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-dユーザーにディレクトリを見せたくないので、ありません。たとえば、次のとおりですroot/css

私が行ったとき、root/appそれは正常に動作し、私は取得し$_GET['url'] = 'app'ます。しかし、私が行くときroot/publicは得られません$_GET['url'] = public。代わりに、publicフォルダーのディレクトリ構造が表示されます。そして、root/public/(末尾のスラッシュに注意してください)に行くと、に行きroot/public/index.php、変数も渡しません。
直し方を教えていただけるとありがたいです。root/publicに書き換えたいroot/public/index.php?url=public

編集:また、私がそれに行くと、の代わりにroot/public/css戻ります。フォルダにアクセスすると、最初のファイルを無視しているようです。$_GET['url'] = 'css'$_GET['url'] = 'public/css'public.htaccess

4

2 に答える 2

0

フォルダにアクセスすると、ファイルを無視してファイルpublicにジャンプします。それを防ぐために、ディレクトリ内のファイルを1 つだけ使用しました。root/public/.htaccessroot/.htaccess.htaccessroot

# Prevent redirection to directory: 'root/css' won't turn into 'root/public/css?url=css'
DirectorySlash off

RewriteEngine on

# When 'root/css', 'root/img' or 'root/js' is accessed, return the real path 'root/public/css/...'
RewriteRule ^((css|img|js)/(.+))$ public/$1 [END]
# For all the requests just pass the u
RewriteRule ^(.*)$ public/index.php?url=$1 [QSA,END]
于 2013-07-23T02:16:15.840 に答える