6

Symfony1.4 と Symfony2 を Apache (2.2.22) の同じホストで動作させようとしています - 問題は、両方が mod_rewrite を使用してリクエストを php コントローラー/スクリプトに送信していることだと思います。ここに私の設定があります

httpd.conf

# Symfony 1.4
<VirtualHost *:80>
  DocumentRoot "d:/wamp/www/wlnew/web"
  DirectoryIndex index.php
  <Directory "d:/wamp/www/wlnew/web">
    AllowOverride All
    Allow from All
  </Directory>

  Alias /sf d:/wamp/www/wlnew/lib/vendor/symfony/data/web/sf
  <Directory "d:/wamp/www/wlnew/lib/vendor/symfony/data/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>
# Symfony 2
Alias /another "d:/wamp/www/another/web/"
<Directory "d:/wamp/www/another/web">
    Options Indexes FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

そして、Symfony の各バージョンには.htaccess、リクエストを書き直すために使用される

シンフォニー 1.htaccess

Options +FollowSymLinks +ExecCGI
<IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteRule ^$ index.html [QSA]
  RewriteRule ^([^.]+)$ $1.html [QSA]
  RewriteCond %{REQUEST_FILENAME} !-f

  # no, so we redirect to our front web controller
  RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

シンフォニー 2.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On

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

localhost/Symfony 1 フロント コントローラーにリダイレクトするために使用できるようにしたいのですが、使用index.phpすると、localhost/anotherすべての要求が symfony2 フロント コントローラーに転送されるはずですが、そうapp.phpではありません - それらは symfony1 フロント コントローラーに転送されます ( index.php)。Symfony2 のコントローラーのファイル名を使用すると、動作します。localhost/another/app.php

/anotherエイリアスを使用するときに、Apache にリクエストを Symfony2 コントローラに転送させるにはどうすればよいですか?

アップデート

書き換えログのログを有効にしました...これは私が得たものです:

[perdir D:/wamp/www/another/web/] strip per-dir prefix: D:/wamp/www/another/web/ -> 
[perdir D:/wamp/www/another/web/] applying pattern '^(.*)$' to uri ''
[perdir D:/wamp/www/another/web/] RewriteCond: input='D:/wamp/www/another/web/' pattern='!-f' => matched
[perdir D:/wamp/www/another/web/] rewrite '' -> 'app.php'
[perdir D:/wamp/www/another/web/] add per-dir prefix: app.php -> D:/wamp/www/another/web/app.php
[perdir D:/wamp/www/another/web/] internal redirect with D:/wamp/www/another/web/app.php [INTERNAL REDIRECT]
[perdir D:/wamp/www/wlnew/web/] add path info postfix: D:/wamp/www/wlnew/web/wamp -> D:/wamp/www/wlnew/web/wamp/www/another/web/app.php
[perdir D:/wamp/www/wlnew/web/] strip per-dir prefix: D:/wamp/www/wlnew/web/wamp/www/another/web/app.php -> wamp/www/another/web/app.php
[perdir D:/wamp/www/wlnew/web/] applying pattern '^$' to uri 'wamp/www/another/web/app.php'
[perdir D:/wamp/www/wlnew/web/] add path info postfix: D:/wamp/www/wlnew/web/wamp -> D:/wamp/www/wlnew/web/wamp/www/another/web/app.php
[perdir D:/wamp/www/wlnew/web/] strip per-dir prefix: D:/wamp/www/wlnew/web/wamp/www/another/web/app.php -> wamp/www/another/web/app.php
[perdir D:/wamp/www/wlnew/web/] applying pattern '^([^.]+)$' to uri 'wamp/www/another/web/app.php'
[perdir D:/wamp/www/wlnew/web/] add path info postfix: D:/wamp/www/wlnew/web/wamp -> D:/wamp/www/wlnew/web/wamp/www/another/web/app.php
[perdir D:/wamp/www/wlnew/web/] strip per-dir prefix: D:/wamp/www/wlnew/web/wamp/www/another/web/app.php -> wamp/www/another/web/app.php
[perdir D:/wamp/www/wlnew/web/] applying pattern '^(.*)$' to uri 'wamp/www/another/web/app.php'
[perdir D:/wamp/www/wlnew/web/] RewriteCond: input='D:/wamp/www/wlnew/web/wamp' pattern='!-f' => matched
[perdir D:/wamp/www/wlnew/web/] rewrite 'wamp/www/another/web/app.php' -> 'index.php'
[perdir D:/wamp/www/wlnew/web/] add per-dir prefix: index.php -> D:/wamp/www/wlnew/web/index.php
[perdir D:/wamp/www/wlnew/web/] strip document_root prefix: D:/wamp/www/wlnew/web/index.php -> /index.php
[perdir D:/wamp/www/wlnew/web/] internal redirect with /index.php [INTERNAL REDIRECT]
[perdir D:/wamp/www/wlnew/web/] strip per-dir prefix: D:/wamp/www/wlnew/web/index.php -> index.php
[perdir D:/wamp/www/wlnew/web/] applying pattern '^$' to uri 'index.php'
[perdir D:/wamp/www/wlnew/web/] strip per-dir prefix: D:/wamp/www/wlnew/web/index.php -> index.php
[perdir D:/wamp/www/wlnew/web/] applying pattern '^([^.]+)$' to uri 'index.php'
[perdir D:/wamp/www/wlnew/web/] strip per-dir prefix: D:/wamp/www/wlnew/web/index.php -> index.php
[perdir D:/wamp/www/wlnew/web/] applying pattern '^(.*)$' to uri 'index.php'
[perdir D:/wamp/www/wlnew/web/] RewriteCond: input='D:/wamp/www/wlnew/web/index.php' pattern='!-f' => not-matched
[perdir D:/wamp/www/wlnew/web/] pass through D:/wamp/www/wlnew/web/index.php

.htaccessSymfony2 ( /another) が読み取られてリダイレクトされるようですapp.phpが、次に他のものを読み取って.htaccessからリダイレクトされるようindex.phpです... 書き換えを停止するにはどうすればよいですかapp.php

4

2 に答える 2

5

RewriteBase両方の.htaccessに設定する必要があるようです。

RewriteBase /another

これはうまくいくはずです。このリンクは、この回答に役立ちました。

また、他の設定がどのように影響し、無限の内部リダイレクト ループをどのように修正できるかについて、チャットでの議論を通じていくつかの注意事項があります。RewriteCond他の人を助けるかもしれません。全体として、mod_rewrite は難しいモジュールの 1 つです。

于 2013-01-29T20:31:20.163 に答える
1

Symfony 2 エイリアスを 内に移動して、sf2 用VirtualHostに別のエイリアスを追加してみてください。DirectoryIndex

<VirtualHost *:80>
  # Symfony 1.4
  DocumentRoot "d:/wamp/www/wlnew/web"
  <Directory "d:/wamp/www/wlnew/web">
    DirectoryIndex index.php
    AllowOverride All
    Allow from All
  </Directory>

  Alias /sf d:/wamp/www/wlnew/lib/vendor/symfony/data/web/sf
  <Directory "d:/wamp/www/wlnew/lib/vendor/symfony/data/web/sf">
    AllowOverride All
    Allow from All
  </Directory>

  # Symfony 2
  Alias /another "d:/wamp/www/another/web/"
  <Directory "d:/wamp/www/another/web">
    DirectoryIndex app.php
    Options Indexes FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>
于 2013-01-22T18:55:33.360 に答える