1

私のプロジェクト (Silex) には、 などにフロント コントローラーweb/index.phpとアセットがweb/css/*ありweb/img/*ます。次の.htaccessファイルをパブリック html フォルダーのルートに配置しました。

<IfModule mod_rewrite.c>
    Options -MultiViews

    RewriteEngine On
    RewriteBase web
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [QSA,L]
</IfModule>

すべてのリクエストは Web フォルダーに書き換える必要があり (RewriteBase webディレクティブ)、ファイルが存在しない場合は ( !-f) フロント コントローラーにルーティングする必要があります。

これは機能していません:

<img src="/img/myimage.png" alt="" />

ファイルmyimage.pngは存在しますが、要求すると/img/myimage.png404 フォルダーが表示されます。パスを変更する/web/img/mmyimage.pngと機能します。

足りないものはありますか?

4

5 に答える 5

0

.htaccess を次のコードに置き換えます。

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

## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## 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 requested files exists in /web then forward it there
RewriteCond %{DOCUMENT_ROOT}/web/$1 -f
RewriteRule ^(.+?)/?$ /web/$1 [L]

# if requested files doesn't exist in /web then forward it to index.php
RewriteCond %{DOCUMENT_ROOT}/web/$1 !-f
RewriteRule ^(.+?)/?$ /web/index.php [L]
于 2013-09-19T09:54:04.690 に答える
0

サーバーが Apache >= 2.2.16 を実行している場合は、次を使用できます。

FallbackResource /index.php

.htaccess の代わりに

<IfModule mod_rewrite.c>
    Options -MultiViews

    RewriteEngine On
    RewriteBase web
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [QSA,L]
</IfModule>

詳細については、Apache のフォールバック リソース: 新しい .htaccess コマンドも参照してください。

于 2013-09-19T11:34:36.300 に答える
0

Kyra が述べたように、web を /web に変更する必要があります。

オプション -マルチビュー

RewriteEngine On
RewriteBase /web
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

しかし、それはあなたの問題を解決するつもりはありません。

主な問題は、DocumentRoot が /path/to/project を指しており、/path/to/project/web を指す必要があることです。

于 2014-01-18T03:06:29.457 に答える