2013-08-16 10 views
6

Betrachten Sie die folgende URL: http://www.myurl.fr/accueil.php/symfony2 versteckt app.php von der URL

Es wird nicht funktionieren. Allerdings funktioniert http://www.myrurl.fr/app.php/accueil funktioniert.

Ich habe die .htaccess-Datei losgeworden, weil ich die vhost-Datei verwenden und auf Apache-Routing angewiesen bin. Meine vhost-Datei ist wie folgt:

<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> 

Ich habe Apache-Cache gelöscht und es mehrmals neu gestartet. Der urlrewrite Mod ist aktiviert. Ich weiß nur nicht, was ich noch überprüfen soll. Irgendeine Idee, was ich vermisse?

BEARBEITEN Es könnte sein, dass beide URL nicht zu einer bestimmten Zeit arbeiten, seit ich daran arbeite. Mein Problem ist immer noch gültig.

+0

Sie können 'ändern AllowOverride All' zu 'AllowOverride None'. Unwahrscheinlich, dein Problem zu lösen, tho. – cheesemacfly

+0

Ja, das wird mein Problem nicht lösen :) – Sam

Antwort

6

Verglichen Ihre Regeln mit Symfony-Standard .htaccess, sah ich, dass Sie die Dateiprüfung verpasst, bevor 'alles Regel übergeben'. Versuchen Sie,

<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> 
+0

das funktioniert tatsächlich! Allerdings werden meine CSS, Bilder und Skripte nicht mehr gefunden. Wie löse ich das? Ich denke, ich sollte eine Regel haben, die das Umschreiben dieser Dateitypen ignoriert. – Sam

+0

ok Ich habe drei Regeln hinzugefügt, um die Ordner css, img und js zu ignorieren, damit sie nicht neu geschrieben werden. Ich habe deine Antwort mit diesen 3 Regeln bearbeitet, damit ich sie als Antwort markieren kann. Danke vielmals. – Sam

+0

@Sam Wo sind die Ignorierregeln für Css, Img und Js Ordner? –

3

Änderung der Apache httpd.conf virtuellen Host-Code zu diesem

ServerName my-site.fr 
<VirtualHost your.ip.address:80> 
DocumentRoot /var/www/mysite/web 
<Directory "/var/www/mysite/web"> 
DirectoryIndex app.php 
Options -Indexes FollowSymLinks SymLinksifOwnerMatch 
AllowOverride All 
Allow from All 
</Directory> 
</VirtualHost> 
4

Die Symfony docs dieses Problems diese gerade nach vorne Lösung bieten.

'<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>' 

Eine Sache, Ich mag würde zu dieser Diskussion hinzuzufügen, ist, dass keines dieser ausgezeichneten Vorschläge Früchte ohne folgende Überlegung tragen wird.

Wenn Sie mit Apache arbeiten, müssen Sie unbedingt mod_rewrite aktivieren!

Wenn Sie also Ihren Kopf gegen die Wand schlagen und sich fragen, warum nichts funktioniert, versuchen Sie es. Es könnte nur Ihre Gesundheit und Ihr Projekt retten! Glückliche Kodierung!

+0

Danke, ich habe festgestellt, dass apache mod_rewrite standardmäßig nicht aktiviert hat, als ich es aktiviert habe, funktionierte meine Konfiguration einwandfrei –

+0

Ich bin froh, dass ich wenigstens einer Person helfen konnte! – icarlosmendez

+0

@icarlosmendez - Machen Sie das 2. Danke! – stefgosselin

2

Die Key-Lösung hier ist, um sicherzustellen, dass mod_rewrite durch Eingabe

a2enmod rewrite 

Wenn Sie 2.4 Apache haben, aktiviert dann Ihre Konfigurationsdatei überprüfen, die anstelle von Order allow.deny

Require all granted 
haben

Hier ist eine Beispielkonfiguration innerhalb Verzeichnis Direktive

AllowOverride all 
Require all granted 
0

@icarlosmende Ihr Vorschlag von "sudo a2enmod rewrite" rettet wirklich meinen Tag!

Das ist, was ich tat, hoffen einige Leute nützlich es

  1. run "sudo a2enmod umschreiben" zuerst
  2. kopieren Sie den Code aus symfony, legen Sie unter „/ etc/apache2/Stätten-finden würde verfügbar“
  3. nur eine Notiz an Menschen, die 500-Fehler erhalten, prüfen Sie, dass var unter Projektordner 777.
+0

> den Code aus symfony kopieren, legen Sie sie unter„/ etc/apache2/sites-available " Was? Dies sollte nicht funktionieren, Sites-verfügbar ist, wo Apache Vhost-Konfiguration beibehalten wird. – stefgosselin

+0

Das ist was ich meine. Kopieren Sie den zweiten Abschnitt des Codes aus dem Abschnitt [Apache mit mod_php/PHP-CGI] (http://symfony.com/doc/current/setup/web_server_configuration.html#web-server-apache-mod-php). – Ben

0

bekam diesen Code in Ihre apache conf /etc/apache2/sites-available/000-default.conf

und stellen Sie sicher, dass mod_rewrite von Eingabe aktiviert ist

umschreiben a2enmod

<VirtualHost *:80> 
     ServerAdmin [email protected] 
     DocumentRoot /var/www/html/web/ 
    DocumentRoot /var/www/html/web 
    <Directory /var/www/html/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> 
</VirtualHost> 
Verwandte Themen