2017-10-17 10 views
0

j'ai renommé fichier server.php à index.php et a ajouté le code .htaccess comme suitLaravel 5.4 suppression de forme publique url ne fonctionne pas correctement

<IfModule mod_rewrite.c> 
<IfModule mod_negotiation.c> 
    Options -MultiViews 
</IfModule> 

RewriteEngine On 

# Redirect Trailing Slashes If Not A Folder... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# Handle Front Controller... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L] 

# Handle Authorization Header 
RewriteCond %{HTTP:Authorization} . 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 
</IfModule> 

url fonctionne bien maintenant, il travaille sans URL, mais

asset() 
public_path() 

La fonction ne fonctionne pas correctement. css, js, les images ne sont pas appelées correctement.

{{ asset('assets/css/custom.css') }} 

Le code ci-dessus pour tout custom.css ne fonctionne pas, il fonctionnait correctement avant. Si j'ajoute public que cela fonctionne correctement, mais ce n'est pas correct. Permettez-moi de savoir comment ajouter globalement public à ces fonctions.

J'ai également essayé d'enlever l'URL en utilisant cette référence mais cela ne fonctionne pas. How can I remove “public/index.php” in the url generated laravel?

+0

S'agit-il d'un compte d'hébergement partagé ou de votre hôte local? – Michel

+0

J'imagine que vous faites cela parce que vous êtes sur un hébergement partagé, sinon vous devriez définir le dossier racine de votre hôte sur '/ public' dans le dossier de votre application Laravel. Mais si vous êtes sur un hébergement partagé, pourquoi ne pas simplement créer un lien symbolique vers le dossier public, comme ceci: 'ln -s/laravel-app/public/public_html' – gmask

Répondre

0

Je fais trois choses pour résoudre ce problème.

Je mets ce fichier htaccess dans mon projet dossier racine

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^(.*)$ public/$1 [L] 
</IfModule> 

Et cette configuration .htaccess dans mon dossier public, c'est project-folder/public

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 
    # Redirect Trailing Slashes If Not A Folder... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 

définissent alors ma configuration d'hôte virtuel comme

<VirtualHost *:80> 
    ServerName example.com 
    DocumentRoot "/path/projectfolder/public" 
    <Directory "/path/projectfolder/public"> 
     Options +Indexes +Includes +FollowSymLinks +MultiViews 
     AllowOverride All 
     Require All 
    </Directory> 
</VirtualHost> 

Cela résout le problème pour moi