0

Laravel 4 アプリケーションがあり、いくつかのサブフォルダー アプリケーションがあります。Laravel 4 アプリはルート フォルダーに.htaccessあり、次の内容のファイルがあります。

Options -MultiViews
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

今、私が行くと、www.mysite.com/subfolder-appリダイレクトループエラーが発生します。サーバー上のサブフォルダーでこのエラーが発生します

4

2 に答える 2

0

サブフォルダーを含めるように RewriteRule を簡単に変更できるはずです。

Options -MultiViews
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /subfolder-app/index.php [L]

ただし、これは環境によって「動的に」変化しないことに注意してください。localhost がサブフォルダーではなく webroot で Laravel を使用して実行されている場合、htaccess ファイルにこの変更を加えると、localhost 開発環境で機能しなくなる可能性があります。

これに対する 1 つの解決策は、.htaccess ファイルを使用せず、ドメインの仮想ホスト構成ファイルに書き換えルールを含めることです。これができるかどうかは、ホスティングによって異なります。

このソリューションには、アプリケーション コード リポジトリから (アプリケーション構成ではなく) サーバー構成を削除できるという利点もあります。

編集

OPが使用した最終的な解決策は次のとおりです。これは、私が提案したものとはまったく異なります。

Options -MultiViews 

RewriteEngine On 

# Rewrite to "www" version
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

# Add -d check to ensure only rewrite if url 
# is not an existing directory
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^ index.php [L]
于 2013-08-26T16:23:59.203 に答える
0

そのため、パブリックlaravelプロジェクトファイルにサブフォルダーがあるという同様の問題がありました。xyz.com/sub-directory にリクエストすると、リダイレクト ループが発生します。私がそれを解決した方法は、末尾のスラッシュの直前に次を追加することでした:

RewriteRule ^sub-directory/([a-zA-Z0-9-_]*/)*?$ / [L,R=301]

# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]

laravel github ページで言及されている解決策の 1 つは、末尾のスラッシュを削除することでしたが、それによってサブディレクトリがデフォルトの apache ディレクトリ ビューアーに公開されてしまい、おそらく本当にそうしたくないでしょう。この方法は、サブディレクトリのベースパスとその中のディレクトリにリダイレクトルールを再帰的に追加するため、私にとってはうまくいきます(それらが英数字、 - または _ 記号で定義されている限り)。

于 2014-12-08T03:33:29.877 に答える