6

次の URL を検討してください: http://www.myurl.fr/accueil

うまくいきません。ただし、 http://www.myrurl.fr/app.php/accueilは機能します。

vhost ファイルを使用し、Apache ルーティングに依存したいので、.htaccess ファイルを削除しました。私のvhostファイルは次のとおりです。

<VirtualHost my.ip.address>
ServerName myurl.fr
ServerAlias www.myurl.fr
DocumentRoot /var/www/mysite/web
DirectoryIndex app.php
<Directory "/var/www/mysite/web">
  AllowOverride All
  Allow from All
</Directory>

<IfModule mod_rewrite.c>
 RewriteEngine On  
 RewriteCond %{ENV:REDIRECT_STATUS} ^$  
 RewriteRule ^app\.php(/(.*)|$) %{CONTEXT_PREFIX}/$2 [R=301,L]
 RewriteRule .? - [L]
 RewriteCond %{REQUEST_FILENAME} -f
 RewriteRule ^(.*)$ app.php [QSA,L]
 RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
 RewriteRule ^(.*) - [E=BASE:%1]    
 RewriteRule .? %{ENV:BASE}app.php [L]
</IfModule>
</VirtualHost>

Apache キャッシュをクリアして、何度も再起動しました。urlrewrite mod が有効になっています。他に何を確認すればよいかわかりません。私が見逃しているものは何ですか?

編集 私はそれに取り組んでいるので、特定の時間に両方の URL が機能しない可能性があります。私の問題はまだ有効です。

4

6 に答える 6

5

あなたのルールを symfony-standard .htaccessと比較したところ、'pass everything rule' の前にファイルのチェックを行っていないことがわかりました。してみてください

<IfModule mod_rewrite.c>
    RewriteEngine On  

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
    # If the requested filename exists, simply serve it.
    # We only want to let Apache serve files and not directories.
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]

    # Rewrite all other queries to the front controller.
    RewriteRule .? %{ENV:BASE}/app.php [L]
</IfModule>
于 2013-08-17T05:30:52.027 に答える
4

Symfony のドキュメントは、この問題に対するこの簡単な解決策を提供しています。

'<VirtualHost *:80>
    ServerName domain.tld
    ServerAlias www.domain.tld

    DocumentRoot /var/www/project/web
    <Directory /var/www/project/web>
        AllowOverride None
        Order Allow,Deny
        Allow from All

        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
    </Directory>

    # uncomment the following lines if you install assets as symlinks
    # or run into problems when compiling LESS/Sass/CoffeScript assets
    # <Directory /var/www/project>
    #     Options FollowSymlinks
    # </Directory>

    # optionally disable the RewriteEngine for the asset directories
    # which will allow apache to simply reply with a 404 when files are
    # not found instead of passing the request into the full symfony stack
    <Directory /var/www/project/web/bundles>
        <IfModule mod_rewrite.c>
            RewriteEngine Off
        </IfModule>
    </Directory>
    ErrorLog /var/log/apache2/project_error.log
    CustomLog /var/log/apache2/project_access.log combined
</VirtualHost>'

この議論に付け加えたいことの 1 つは、これらの優れた提案はどれも、次の考慮事項なしでは実を結ばないということです。

Apache を使用している場合は、必ず mod_rewrite を有効にする必要があります。

`sudo a2enmod rewrite`

壁に頭をぶつけて、なぜ何もうまくいかないのか不思議に思っているなら、これを試してみてください. それはあなたの正気とプロジェクトを救うかもしれません! ハッピーコーディング!

于 2016-03-28T17:08:31.807 に答える
2

ここでの重要な解決策は、入力してmod_rewriteが有効になっていることを確認することです

a2enmod rewrite

Apache 2.4を使用している場合は、構成ファイルを確認してください。Order allow.deny

Require all granted

ディレクトリディレクティブ内のサンプル構成を次に示します。

AllowOverride all
Require all granted
于 2016-05-13T17:01:23.947 に答える