0

どのように機能するかを理解することは許されていないと思うところまで来ましたmod_rewrite。理論的には、私はそれを手に入れたと思いますが、これを機能させることができないようです. 次のファイル構造があります。

code
    -application/
    -bundles/
    -laravel/
    -public/
        -css/
        -js/
        -img/
        -index.php
    -storage/
    -.htaccess

悲しいことに、私のhttpd.confVHost 構成には次のものがあります。

<Directory path/to/code>
Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

DocumentRoot path/to/code

<IfModule dir_module>
DirectoryIndex index.php
</IfModule>

そして、それを code/public/ を指すように変更することはできないので、 で修正できると思います.htaccess。今、私はすべてを試しました。基本的に私がやりたいことは、変換する必要があるもの/public/index.php/($1)を除いcss, js, imgて、すべてのリクエストを に変換することです:

/public/css/($1)
/public/img/($1)
/public/js/($1)

したがって、example.com/これがに変更されexample.com/public/index.php、それらの css、img、js などがexample.com/public/css、img、js に変更される場合。

私はそれをすることはできません:(

.htaccessは多くの形をとってきましたが、最近はすべてをあきらめて、次のようになりました。

<IfModule rewrite_module>
    RewriteEngine on
    RewriteRule ^(.*)$ /public/index.php/$1
</IfModule>

もちろん、これは書き換えでループを引き起こすため、 500内部サーバーエラーを与えます(とにかく私にはそれほど明確ではありませんが、それでも)

だから、私の考え.htaccessは(疑似コード)でした:

<IfModule rewrite_module>
    RewriteEngine on

    RewriteCond %{REQUEST_URI} ^/css
    RewriteRule ^css/(.*)$ /public/css/$1

    RewriteCond %{REQUEST_URI} ^/img
    RewriteRule ^img/(.*)$ /public/img/$1

    RewriteCond %{REQUEST_URI} ^/js
    RewriteRule ^js/(.*)$ /public/js/$1

    RewriteRule ^(.*)$ /public/index.php/$1
</IfModule>

どうすればこれを達成できますか?私が間違っていることを少し理解したいと思います。mod_rewrite .htaccess良いファイルを書く方法を見つけたいです。

私はWindows 7、Apache2.2を使用しています

前もって感謝します。

4

1 に答える 1

1

書き換えられたパスはすべて、先頭から httpd.conf および .htaccess ディレクティブを介して戻る必要があるため、無限ループが発生しています。フラグはよく提案されますLが、これは Apache に現在の実行を停止するように指示するだけです。完成した書き換えパスが上からディレクティブを経由しなければならないことを止めません。

「/public」に書き換える場合は、RewriteCond を追加して、この書き換えがまだ行われていないことを確認する必要があります。そうしないと、毎回書き換えが行われ、無限ループが発生します。

これは、「パブリック」リライトで機能するはずです。

RewriteCond %{REQUEST_URI} !^/public/
RewriteRule (.*) /public/$1

これは、「要求されたパスがまだ開始されていない場合は、要求を/public/静かに書き直して先頭に追加/public/します。

周辺ファイルのリクエスト (CSS、画像など) で何をしようとしているのかは明確ではありません。のリクエストが必要な場合/public/page.css/public/css/page.css、次のようにする必要があります。

RewriteRule ^public/([^/]+)\.css$ /public/css/$1.css

ただし、これを行うメリットはありません。ページ スクリプトまたは静的 HTML ページを更新し、CSS および画像ファイルに使用する新しいパス構造を反映するように単純に変更する方がよいと思います。mod_rewrite を使用してページ内のパスを更新しないようにすることは (私の謙虚な意見では) 悪い考えであり、サーバーの負荷が重くなり、リクエストの応答が遅くなります。

mod_rewrite の詳細については、Apache mod_rewrite マニュアル ページを参照してください。

于 2013-06-30T16:49:58.393 に答える