Laravel プロジェクト フォルダにリダイレクトする

Laravel プロジェクト フォルダにリダイレクトする

ファイルに次の内容があります。と同じレベルにある.htaccessプロジェクト フォルダにリダイレクトされることを期待していました。 リダイレクトは行われず、 の内容が表示されたままです。/hc.htaccessindex.html

RewriteEngine On

RewriteBase /hc/

<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?/$0 [PT,L,QSA]

答え1

私はそれが私のプロジェクトフォルダにリダイレクトされると思っていました/hcが、同じレベルで.htaccess

それが問題です。.htaccessファイルがサブディレクトリにある場合、リクエストにサブディレクトリ/hcを含めていない限り、リクエストは認識されません。/hc

ファイル.htaccessは親ディレクトリ、つまりドキュメント ルートに配置する必要があります。(ちなみに、RewriteBase /hc/このファイルがドキュメント ルートにある場合にのみ、ディレクティブが必要になります。)

または、追加 .htaccessドキュメント ルートに、すべてのリクエストを/hcディレクトリ (フロント コントローラー) に転送するファイルを作成します。例:

RewriteEngine On
RewriteRule (.*) hc/$1 [L]

mod_rewrite はデフォルトでは継承されないため、リクエストが/hcサブディレクトリに書き換えられると、.htaccessサブディレクトリ内のファイルが処理され、親ファイルの mod_rewrite ディレクティブが上書きされる.htaccessため、書き換えループが発生しないことに注意してください。


RewriteRule .* index.php?/$0 [PT,L,QSA]

アップデート:あなたの代替最後の文字列は、RewriteRule前のディレクティブと異なります。どちらもおそらく正しくありません。?クエリ文字列を使用するつもりがない場合は、上記のディレクティブの を削除することをお勧めします。その場合は、前のディレクティブに を追加する必要があります?。現状では、最初のディレクティブは を使用しています。パス情報URLを渡すには、2番目はクエリ文字列

ちなみに、PTディレクトリごとのファイルではフラグは冗長です.htaccess。また、クエリ文字列を使用していない場合は、QSAフラグを削除することもできます。

答え2

「sites-available」Apache 構成ファイルで「rewrite」オプションを有効にする必要があります。Laravel の場合、DocumentRoot (.htaccess ファイルが必要なパブリック フォルダー) がプロジェクト フォルダー内にあるため注意が必要です。

関連情報