1

私は[質問]を尋ねました:逆ルーティングについてここでhtaccess逆ディレクトリ。ただし、問題のファイルではなく、ディレクトリビューを取得し続けます。

例:/img/header.jpgに移動します。ファイルheader.jpgが存在するときに、フォルダー/img/のコンテンツを取得します。オプションに-Indexesを追加しましたが、403禁止アクセスメッセージが表示されます。

htaccessを編集してimgs/js / cssなどを表示し、再帰的な構造を維持するにはどうすればよいですか?

現在のhtacces:

 Options +FollowSymLinks -MultiViews -Indexes
 # Turn mod_rewrite on
 RewriteEngine On
 RewriteBase /

 RewriteCond %{DOCUMENT_ROOT}/$1/$2.php !-f
 RewriteRule ^(.*?)/([^/]+)/?$ $1/ [L]

 RewriteCond %{DOCUMENT_ROOT}/$1.php -f
 RewriteRule ^(.*?)/?$ $1.php [L]

前もって感謝します

編集

RewriteBase/の直後に次の行を追加してみました。

RewriteCond %{REQUEST_FILENAME} !-f

これはほとんどのファイルで機能します。これだけが、images / css / js / ico/etcの場合にのみ機能するはずです。現時点では、phpファイルが直接見つかった場合は機能すると思います。

私が理解できないように見えるのは、残りのパラメーターを取得する方法です。

 /index/foo/bar/for/

見つかるはずのファイルはfooですが、$ _ GETで残りの2つのパラメーターを取得するにはどうすればよいですか?

4

1 に答える 1

0

コードを次のように変更します。

オプション+FollowSymLinks-MultiViews -Indexes

# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
# If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
# don't do anything
RewriteRule ^ - [L]

# if current ${REQUEST_URI}.php is not a file then
# forward to the parent directory of crrent REQUEST_URI
RewriteCond %{DOCUMENT_ROOT}/$1/$2.php !-f
RewriteRule ^(.*?)/([^/]+)/?$ $1/ [L]

# if current ${REQUEST_URI}.php is a valid file then 
# load it be removing optional trailing slash
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

編集: OPのコメントに基づいて、このソリューションはクエリパラメータparamをパスの残りの部分で埋めます:

# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
# If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
# don't do anything
RewriteRule ^ - [L]

# if current ${REQUEST_URI}.php is not a file then
# forward to the parent directory of crrent REQUEST_URI
RewriteCond %{DOCUMENT_ROOT}/$1/$2.php !-f
RewriteCond %{QUERY_STRING} ^(?:param=)?(.*)$
RewriteRule ^(.*?)/([^/]+)/?$ $1/?param=$2/%1 [L]

# if current ${REQUEST_URI}.php is a valid file then 
# load it be removing optional trailing slash
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
于 2012-05-08T12:12:35.793 に答える