1

共有サーバーで Symfony2 を使用しており、抱えている問題を修正しようとしています。app.php ランディング ページを取り除き、同時に symfony の Web ディレクトリをルート ディレクトリとして指定したいと考えています。

そのため、ルート ディレクトリの設定は簡単です。

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !^/symfony/web/
RewriteRule ^(.*)$ /symfony/web/$1 
</IfModule>

私はこの後立ち往生しています。私は試した

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !^/symfony/web/
RewriteRule ^(.*)$ /symfony/web/$1 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ $1app.php [L] 

</IfModule>

これが順次実行されると考えています。しかし、そうではありません。代わりに、両方の条件を探し、両方のルールを同時に実行しているようです。たとえば、example.com/app.php を呼び出すと、 example.com/symfony/web/app.phpapp.php が取得されます。さまざまなタグのさまざまな組み合わせを試しましたが、インターネットで読んだこととは対照的に、それらは常に一度に実行されるという結論に達しました。公式ドキュメントは例が非常にまばらで、私が抱えている問題には答えていません。

誰が私が間違っているのか考えていますか?

ありがとう。

4

2 に答える 2

0

行う

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !^/symfony/web/ -f
RewriteRule ^(.*)$ /symfony/web/$1 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /symfony/web/app.php [QSA,L] 

</IfModule>
于 2012-08-31T19:30:09.420 に答える
0

以下は、app.php の必要性を隠し、すべてを正しい public フォルダーに向けます。注意すべき点として、symfony のすべてのパブリック リソースは /web/bundles に保存されますが、ユーザーが Web で直接アクセスできるのは実際には app.php だけです。

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_URI} ^/bundles
RewriteRule ^(.*)$ /symfony/web/$1 [L]

RewriteCond %{REQUEST_URI} !^/symfony/web
RewriteRule ^(.*)$ /symfony/web/app.php/$1 [L]

</IfModule>

最初に /bundles かどうかを探し、次に symfony/web を前に追加してそこで停止します。それ以外の場合、/symfony/web が存在するかどうかを探し、存在しない場合は app.php を先頭に追加して停止します。私は symfony を使用して php コードですべての URL を生成しているので、これは問題になりません。

できれば、symfony/web をすべての先頭に追加し、それがファイルかどうかをテストし、そうでない場合は app.php を最後に追加します。残念ながら、私はそれを機能させることができませんでした。Symfony は、ページが存在しないことを検出したときに独自のリダイレクトを行い、vhost 内にいると複雑さが増すだけなので、これは私が得ることができるのと同じくらい良いことです.

于 2012-09-02T12:58:15.973 に答える