2017-06-27 6 views
0

htaccess書き換えルールに関する助けが必要です。既存のファイルを除くすべてのリクエストをハンドラにマップする方法

私は、既存のファイルを除くすべての要求を処理するために使用されるハンドラindex.htmlを持っています。 私は、このルール使用しています:

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

をしかし、私は処理される要求に類似したいくつかのファイル名を持っています。/mainへのリクエストがあった場合、index.htmlで処理する必要がありますが、拡張子がmain.asdfjaskldfjaskdfjasfd.jsの既存のファイルがあるため、404エラーが発生します。

この問題は、1つのライナーでnginxに簡単に解決されます。 "try_files $ uri $ uri//index.html;"私は、生産専用のApacheでnginxを使う機会はありません。

だから私はそれらのルールにいくつかの助けが必要です。

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d 
RewriteRule^- [L] 
RewriteRule^/index.html 

全htaccessファイル:事前に

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteCond %{HTTPS} off 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

# Redirect Trailing Slashes If Not A Folder... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# Handle Front Controller... 
RewriteCond %{REQUEST_URI} ^/(demo-auth|api|oauth|password|login|logout|register|images) 
RewriteRule^laravel.php [L] 

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f 
RewriteRule^/index.html 

RewriteCond %{HTTP:Authorization} . 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

おかげ は(他の数十に加えて)これを試してみました。

答えて

1

のMultiViewsを無効にするには、あなたのhtaccessファイルの先頭に、以下の点を追加します。

Options -MultiViews 

Apache docs on mod_negotiationを有効にすると、MultiViewsオプションが何をするかについて説明します。

を サーバがA受信した場合/ some/dir/fooと/ some/dir/fooに対する要求が でない場合、サーバは foo。*という名前のすべてのファイルを検索してディレクトリを読み取り、それらをすべて指定するタイプマップを効果的に作成します。それらが同じメディアタイプとコンテンツエンコーディングを割り当てている場合、クライアントがその名前の1つを要求した場合には が持ちます。それから がクライアントの要件に最も適したものを選択し、 というドキュメントを返します。

+1

ええと...それはMultiviewsの欠陥でした。それはAWSであり、それはいくつかの特定の構成を持っています。たとえば、Debianではデフォルトではありましたが、AWSにはありません。だから私はhtaccessにこのオプションを入れて、すべてうまくいった。ありがとう!@ – Korben

関連する問題