web-dev-qa-db-ja.com

index.phpの書き換えルールを使用して、LaravelのクリーンURLを構成します

最近Laravelの学習を始めましたが、フレームワークの経験はありません。次の問題が発生しています。。htaccessファイルを設定しようとしているので、きれいなURLsを取得できますが、取得できるのは404 Not Foundエラーページだけです。仮想ホストを作成しました-構成ファイルの下に表示されます-パブリックディレクトリの.htaccesss fileを変更しました。

/etc/Apache2/sites-available

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName  laravel.lar

    DocumentRoot "/home/giannis/Desktop/laravel/public"
    <Directory "/home/giannis/Desktop/laravel/public">
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
    </Directory>

    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${Apache_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${Apache_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

。htaccesssファイル:

laravel/public

# Apache configuration file
# http://httpd.Apache.org/docs/current/mod/quickreference.html

# Note: ".htaccess" files are an overhead for each request. This logic should
# be placed in your Apache config whenever possible.
# http://httpd.Apache.org/docs/current/howto/htaccess.html

# Turning on the rewrite engine is necessary for the following rules and
# features. "+FollowSymLinks" must be enabled for this to work symbolically.



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

# For all files not found in the file system, reroute the request to the
# "index.php" front controller, keeping the query string intact

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

それをテストするために、aboutという名前のビューを作成し、適切なルーティングを作成しました。 http://laravel.lar/index.php/about/にリンクする場合、http://laravel.lar/about/にリンクする場合は、代わりにaboutページにルーティングします。404 Not Foundエラーが発生します。

Debianベースのシステムを使用しています。

私はあなたの問題を見ていると思います。書き換えルールに追加の疑問符を追加しています。

RewriteRule ^(.*)$ index.php?/$1 [L]

あるべき

RewriteRule ^(.*)$ index.php/$1 [L]

提供するURLの例に基づきます。 http://laravel.lar/index.php/about/の後にindex.phpの後に疑問符がありません

Mod_rewriteが有効になっていない可能性もあります。あなたはUbuntuのようなDebianベースのシステムのようです。コマンドSudo a2enmod rewriteを使用してmod_rewriteを有効にできます。

6

今日も同じ問題に出会いました。 2段階で解決しました

  1. 書き換えモジュールの有効化

    Sudo a2enmod rewrite
    
  2. 仮想ホスト構成ファイルでAllowOverride NoneAllowOverride Allに変更しました。 AllowOverride None-Apacheサーバーがサイトディレクトリにある.htaccessファイルを読み取れないようにします。

それが役に立てば幸い。

6
Sergey Tsoy