0

これに似た質問を見つけましたが、うまくいかないようです(Webルートフォルダーを.htaccessのサブフォルダーにしますか?)。だから私は私の問題に対する答えを見つけることができなかった後に助けを求めています-私はあきらめる前にスタックオーバーフローで200ページ以上の結果を2時間かけて調べました。いずれかの方法...

私は小さなCMSを作成していて、ディレクトリ構造を次のように設定しています。

application
-- html
-- -- public
-- -- -- theme
-- -- -- -- css
-- -- -- -- images
-- -- -- -- js
-- -- -- forum
-- -- -- -- index.php
-- -- -- -- viewforum.php
-- -- -- -- viewthread.php
-- -- -- -- comment.php
-- -- -- index.php
-- -- -- login.php
-- -- -- profile.php
-- -- admincp
-- -- -- theme
-- -- -- -- css
-- -- -- -- images
-- -- -- -- js
-- -- -- index.php
-- -- -- manage.php
-- -- -- users.php
-- -- -- settings.php
-- plugins
library

私が達成しようとしているのは、mydomain.com / application / html / public / index.phpをmydomain.com/index.phpにマップし、admincpを使用してそのmydomain.com/admincp/index.phpをマップすることです。パブリックディレクトリ内のすべてがルートディレクトリにあるように見えるようにします。

mydomain.comを表示すると、.. / public /のindex.phpファイルが表示されますが、mydomain.com / index.phpを試してみると、「見つかりません」というエラーが表示されます。mydomain.com/admincpまたはmydomain.com/admincp/manage.phpにアクセスすると、それは機能しますが、それを改善する方法を知っている場合は、私に知らせてください。:)

RewriteEngine on
RewriteRule ^$ application/html/public/
#RewriteRule ^(.*)$ application/html/public/$1 # Breaks site

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

この問題に取り組むことができる助け、アドバイス、皮肉をいただければ幸いです。

- 編集 -

@Michaelは私の目的にかなう答えを私に提供してくれましたこれは結果でした:

RewriteEngine on
# Don't need this...
#RewriteRule ^$ application/html/public/

# Need [L] and a RewriteCond
# Don't do the rewrite if this is an actual existing file
# such as what is rewritten into application/html/public
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# And don't write admincp into public
RewriteCond %{REQUEST_FILENAME} !admincp
# With the above conditions met, write anything else into the public dir
RewriteRule ^(.*)$ application/html/public/$1 [L]

# Then just write admincp into application/html/admincp
RewriteRule ^admincp/(.*) application/html/admincp/$1 [L] 

ルートを表示したときにディレクトリインデックスが表示される問題を修正する必要があります--mydomain.com/

- 編集 -

追加したとき RewriteRule ^$ application/html/public/ は壊れなかったので、見た目は正常に動作します。

4

1 に答える 1

1

フラグの欠落[L]と が一致した場合の書き換えループpublic/は、サイトの破損の原因である可能性があります。パブリック エリアの 2 つのルールのうち、最初のルールは、2 番目のルールが正しく行われている場合は不要です。

RewriteEngine on
# Don't need this...
#RewriteRule ^$ application/html/public/

# Need [L] and a RewriteCond
# Don't do the rewrite if this is an actual existing file
# such as what is rewritten into application/html/public
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# And don't write admincp or others into public

# Add each area you need to exclude into the () below
RewriteCond %{REQUEST_FILENAME} !(admincp|formus|otherarea1|otherarea2)

# With the above conditions met, write anything else into the public dir
RewriteRule ^(.*)$ application/html/public/$1 [L]

# Then just write admincp into application/html/admincp
#RewriteRule ^admincp/(.*) application/html/admincp/$1 [L]
# Update: Instead of the above rule, if you need additional rules like forums
# make the final rule generic to capture the directory in ([^/]+):
RewriteRule ^([^/]+)/(.*) application/html/$1/$2 [L]
于 2012-06-17T02:33:41.317 に答える