2017-02-28 54 views
7

Właśnie uruchomiłem projekt Laravel 5.3 na serwerze na żywo i wszystko idzie dobrze oprócz jednego.Jak wydawać i dostosowywać .htaccess dla Laravel?

Ale mój problem polega na tym, że moje strony internetowe działają pod wszystkimi 3 różnymi adresami URL.

Mój serwer to Ubuntu 16.4.

  1. website.com

  2. website.com/public/index.php

  3. website.com/ każdym słowie /index.php

My .htaccess jest : (Ten plik znajduje się w folderze głównym)

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
    RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L] 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    RewriteRule ^(.*)$ public/index.php$1 [L] 
</IfModule> 

Ale chcę tylko zobaczyć moją stronę z adresem URL: website.com.

+0

hi jest chcesz usunąć tworzą/public swoją stronę ...? –

+0

Cześć, popraw mnie, jeśli jestem zły. Chcesz, aby wszystkie adresy URL były wyświetlane w witrynie example.com zamiast w witrynie www.example.com. a wszystkie adresy URL inne niż kończące się na /index.php zostaną przekierowane na example.com? – TheChetan

Odpowiedz

1

Aby tylko dopasować stronę główną, czyli http://domainxyz.com/ trzeba dopasować pustą ścieżkę (jak usuwa Mod_rewrite wiodącą /

RewriteCond %{HTTP_HOST} ^www.domainxyz.com [NC] 
RewriteRule ^$ /view.php?page=process/ [NC,L] 
+0

Cześć, nie używam na przykład '/view.php? Page = process /' my framwork, Moim problemem jest "witryna.com.com" z tym adresem URL "website.com/ any word/index.php". – mySun

1

Spróbuj użyć tego w pliku .htaccess.

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^website.com/([a-zA-Z-]*)/index.php [NC,OR] 
RewriteCond %{HTTP_HOST} ^www.website.com/([a-zA-Z-]*)/index.php [NC] 
RewriteRule ^(.*)$ http://www.website.com [L,R=302,NC] 

Makijażu upewnij się, że wyczyściłeś pamięć podręczną przed przetestowaniem tego. Zauważysz, że użyłem R=302, jest to tymczasowe przekierowanie. Jeśli przekierowanie działa i jesteś z niego zadowolony, przełącz to na R=301, który jest stałym przekierowaniem.

+0

Witam, dziękuję za pomoc, ale nie działaj w tym kodzie :-( – mySun

+0

Moje pliki to ta trasa: '/ var/www/html'. – mySun

2

Wygląda na to, że twoja aplikacja Laravel jest dostępna za pośrednictwem aliasu HTTP Apache. Wykonaj następujące kroki:

Spróbuj nawigować do planowanej trasy, poprzedzając ją numerem /index.php/, w twoim przypadku: website.com/index.php/users. Jeśli to działa (nr 404), to masz problem z konfiguracją modułu Przepiszanie HTTP Apache, powinieneś wykonać kolejne kroki.

Edytuj plik public/.htaccess.

ramach linii RewriteEngine On dodać RewriteBase / jeśli pliki są na razie w katalogu głównego folderu jak laravel następnie dodać RewriteBase /laravel/

próby dotarcia do istniejącej trasy.

tj

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteBase/
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
    RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L] 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    RewriteRule ^(.*)$ public/index.php$1 [L] 
</IfModule> 

Usuń/publiczny z laravel stworzenie wirtualnego hosta

iść do /etc/apache2/sites-available tworzyć .conf plik lub zaktualizować 000-default.conf

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName website.com 
    ServerAlias www.website.com 

DocumentRoot /var/www/html/index.html 

     <Directory /var/www/html/> 
      Options Indexes FollowSymLinks 
      AllowOverride All 
      Require all granted 
     </Directory> 


     ErrorLog ${APACHE_LOG_DIR}/error.log 
     CustomLog ${APACHE_LOG_DIR}/access.log combined 
RewriteEngine on 
RewriteCond %{SERVER_NAME} =website.com [OR] 
RewriteCond %{SERVER_NAME} =www.website.com 
RewriteRule^https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] 
</VirtualHost> 
+0

Cześć, dziękuję za pomoc, dodam' RewriteBase/'in '.htaccess' plik w folderze głównym i folderze publicznym .Tylko to, gdzie prawdziwe:' website.com/ dowolne słowo/index.php' i teraz mogę otworzyć stronę z 'site.com/public/index.php' :-( – mySun

+0

@mySun działa poprawnie teraz ... czy nadal masz problem ..? –

+0

Mój przykładowy kod znajduje się w pliku '.htaccess' w projekcie głównym Teraz w wierszu' RewriteEngine On' dodaj 'RewriteBase /' w pliku ' public/.htaccess.. ale widzę moją stronę z 'witryną.com/public/index.php' oraz 'website.com/public'. – mySun

1

Ten kod pracował dla mnie. Usunie to rozszerzenie z Twojej witryny, np.php i wszystko. Wypróbuj raz.

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R=301,L] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*?)/?$ $1.php [NC,L] 
+0

Witam, dodałem ten kod do 'public/.htaccess' lub '.htaccess' w katalogu głównym? – mySun

+0

możesz dodać to w obu miejscach. ale public/.htaccess jest tym, co sugeruję. – Siddhesh

+0

Mam dodać ten kod lub zastąpić? – mySun

1

1. Rozumiem, dlaczego starasz się zmienić .htaccess, ale to można rozwiązać wiele prostsze. Przywrócić plik .htaccess z powrotem do laravel standardowej

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

2. Przenieś wszystkie foldery i pliki oprócz publicznego i upewnij się, że są za folderze HTML.

3. Przenieś wszystkich folderów publicznych oraz pliki z folderu publicznego do folderu html

4. Tell laravel szukać w folderze html zamiast społeczeństwa poprzez zmianę serwera. php plik

<?php 

/** 
* Laravel - A PHP Framework For Web Artisans 
* 
* @package Laravel 
* @author Taylor Otwell <[email protected]> 
*/ 

$uri = urldecode(
    parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) 
); 

// This file allows us to emulate Apache's "mod_rewrite" functionality from the 
// built-in PHP web server. This provides a convenient way to test a Laravel 
// application without having installed a "real" web server software here. 
if ($uri !== '/' && file_exists(__DIR__.'/html'.$uri)) { 
    return false; 
} 

require_once __DIR__.'/html/index.php'; 

Uważam to rozwiązanie dużo prostsze niż bawić się z tobą htaccess. Zapewniasz również, że nie można uzyskać dostępu do wszystkich podstawowych plików Laravel z adresu URL.

Inny problem masz (strony wewnętrzne)

Jest to prawdopodobnie ze względu na swój apache nie pozwalając nadpisanie z Laravels htaccess

Przejdź do wiersza poleceń serwera i dostęp do apache2.conf złożyć

cd /etc/apache2 

Otwórz plik apache2.conf z nano

sudo nano apache2.conf 

Teraz zlokalizuj następujący

<Directory /var/www/> 
     Options Indexes FollowSymLinks 
     AllowOverride None 
     Require all granted 
</Directory> 

zmienić na

<Directory /var/www/> 
     Options Indexes FollowSymLinks 
     AllowOverride All 
     Require all granted 
</Directory> 

Writeout zmiany i wyjść nano.

restart apache

sudo service apache2 restart 

Powinno teraz działać :)