0

.htaccess ファイルに mod の書き換えがあり、いくつかの書き換えエントリがあります。

RewriteRule ^/services/(\w+)$ controllers/$1.php [L]
RewriteRule ^.*$ index.html [L]

http://blah.com/services/somethingにアクセスすると、最初のルールに一致して停止するのではなく、blah.com のインデックスにリダイレクトされます。

また: 最後のルールを次のように変更すると:

RewriteRule ^(\w+)$ index.html [L]

最初の / の後に追加のパスがある場合だけではなく、アプリケーションは「機能します」。

なぜこうなった?

4

1 に答える 1

0

このルール ( RewriteRule ^.*$ index.html [L]) はあまりにも一般的であり、htaccess ファイルから呼び出されるとすべてをインデックス ページに書き換えます。services/something から services/controller/something.php へのリダイレクト後、ルート htaccess が再度呼び出され、最初のルールが適用されない (一致しない) ため、一致する 2 番目のルールに移動します。

役立つ可能性のある 3 つのことを考えることができます。

1) END フラグを使用してみましたか?

RewriteRule ^/services/(\w+)$ controllers/$1.php [END]

2)services/controllerディレクトリに、ルート レベルの htaccess を無効にする htaccess を配置します。たとえば、ディレクティブを使用してRewriteEngine off

3) RewriteCond ディレクティブのリストを使用して、インデックス ルールへのリダイレクトをより具体的にします。

于 2013-11-03T14:17:12.583 に答える