ファイルに次の内容があります。と同じレベルにある.htaccess
プロジェクト フォルダにリダイレクトされることを期待していました。 リダイレクトは行われず、 の内容が表示されたままです。/hc
.htaccess
index.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 ファイルが必要なパブリック フォルダー) がプロジェクト フォルダー内にあるため注意が必要です。