<p>React から Laravel API に POST リクエストを実行しようとしています。開発モードでリクエストを送信すると、リクエストは成功しますが、Apache2 に API(:8000) とフロントエンド(:80) をデプロイすると、リクエストは厳密モード ポリシーによってブロックされ、CORS エラーが表示されます。リクエストにはアクセス制御がありません - 応答のAllow-Originと404。ただし、Laravel と React のページにはブラウザーでアクセスできます。リクエストには Axios を使用します。
また、Web サイトには同じベース URL <code>http://localhost</code> が必要です。
多くの解決策を試しましたが、どれもうまくいきませんでした。 </p>
<h1>Laravel 10.x カーネル</h1>
<p>多くのユーザーがサーバー応答にヘッダーを追加するミドルウェアの作成を提案しているのを見てきました。同様のコンテンツが Laravel にデフォルトで追加されます (<code>conf/cors.php</code>)。
私のファイルは次のようになります</p>
<pre class="brush:php;toolbar:false;">'paths' => ['http://127.0.0.1:8000','http://localhost','api/*', 'sanctum/csrf-cookie']、
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exused_headers' => ['*'],
'max_age' => 0、
'supports_credentials' => false,</pre>
<p><code>Kernel.php</code>には以下のように登録されています</p>
<pre class="brush:php;toolbar:false;">protected $middlewareAliases = [
// 'cors' => \App\Http\Middleware\Cors::class, <- これは現在使用されていないカスタム ミドルウェアです
'cors' => \Illuminate\Http\Middleware\HandleCors::class,
'auth' => \App\Http\Middleware\Authenticate::class,
...
保護された $ミドルウェア = [
// \App\Http\Middleware\Cors::class, <- これはカスタムです
ミドルウェアは現在使用されていません
\Illuminate\Http\Middleware\HandleCors::class,</pre>
<p>これは、カスタム ミドルウェアを使用する場合の <code>api.php</code> にあるものです</p>
<pre class="brush:php;toolbar:false;">Route::group(['middleware'=>'cors','prefix'=>'api'], function ()
{
Route::post('/signup',[AuthController::class, 'signup']);
Route::post('/login',[AuthController::class, 'login']);
Route::post('/logout',[AuthController::class, 'logout']);
Route::post('/user/post',[PostController::class,'createPost']);
Route::get('/user/post',[PostController::class,'getPostsInMonth']);
Route::post('/media/upload',[UploadController::class,'upload']);
});</pre>
<p>カスタムミドルウェアを使用しても成功しません</p>
<pre class="brush:php;toolbar:false;">class Cors
{
パブリック関数ハンドル(リクエスト $request, クロージャ $next): レスポンス
{
$next($request) を返す
->header('アクセス制御-許可オリジン', '*')
->header('アクセス制御の許可メソッド', 'GET、POST、PUT、PATCH、DELETE、OPTIONS')
->header('Access-Control-Allow-Headers', 'Content-Type、Authorization、Origin、X-Requested-With');
}
}</pre>
<h1>Apache Laravel VirtualHost ファイルにヘッダーを追加</h1>
<pre class="brush:php;toolbar:false;"><VirtualHost *:8000>
サーバー名 website.com
ServerAlias*.website.com
ServerAdmin webmaster@localhost
DocumentRoot .../laravel/public
ヘッダーに Access-Control-Allow-Origin "*" を追加します。
ヘッダーに Access-Control-Allow-Headers "Origin、X-Requested-With、Content-Type、Accept、Authorization" を追加します。
<ディレクトリ ".../laravel">
ヘッダー セット Access-Control-Allow-Origin "*"
ヘッダー セット Access-Control-Allow-Headers "Origin、X-Requested-With、Content-Type、Accept、Authorization"
命令の許可、拒否
すべてから許可する
すべての付与を要求する
</ディレクトリ>
</VirtualHost></pre>
<p>React Apache VirtualHost ファイルは Laravel ファイルに非常によく似ています</p>
<p>成功しませんでした:(</p>
Laravel/public の <h1>.htaccess</h1>
<pre class="brush:php;toolbar:false;"><IfModule mod_headers.c>
ヘッダー セット Cross-Origin-Resource-Policy 'cross-origin'
ヘッダー セット Access-Control-Allow-Origin "*"
</IfModule></pre>
<h1>API アドレスをプロキシとして設定</h1>
<p><code>package.json</code> に次の行を追加しました</p>
<pre class="brush:php;toolbar:false;">"プロキシ": "http://localhost:8000",</pre>
<p><code>http-proxy-middleware</code> パッケージも試してみました
React/src フォルダー内の <code>setupProxy.js</code></p>
<pre class="brush:php;toolbar:false;">const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
'/api/*',
createProxyMiddleware({
ターゲット: 'http://localhost:8000',
ChangeOrigin: true、
})
);
};</pre>
<h1>axios クライアント スクリプト</h1>
<pre class="brush:php;toolbar:false;">「axios」から axios をインポートします;
const axiosClient = axios.create({
ベース URL: "http://127.0.0.1:8000/api"、
})
axiosClient.interceptors.request.use((config)=>{
const token = localStorage.getItem('ACCESS_TOKEN');
config.headers = {
'認可': `ベアラー ${トークン}`,
'アクセス制御-許可-オリジン': '*'
}
構成を返します。
})
axiosClient.interceptors.response.use((response)=>{
応答を返します。
},(エラー)=>{
const {応答} = エラー;
if(response &&response.status == 401){
localStorage.removeItem('ACCESS_TOKEN');
}
エラーをスローします。
})
デフォルトの axiosClient;</pre> をエクスポートします。
<p>多くの設定によりサイトが安全ではなくなることは承知していますが、これは開発目的のみです。
助けてください。3 日間この問題に苦しんでいます><</p>
<p>これが私が得た結果です(申し訳ありませんが、フォーマットの問題によりスタックが画像をアップロードすることを望んでいません)</p>
<pre class="brush:php;toolbar:false;">![1]: https://pasteboard.co/feqZ6JrGrvBM.png
![2]: https://pasteboard.co/nluAk8scYXzY.png
![3]: https://pasteboard.co/JF7yiHhH4XtB.png</pre></p>
Your Answer
1 件の回答
最後に、プロジェクト全体を /var/www フォルダーから移動し、各サイトのパブリック フォルダーへのシンボリック リンクのみを作成します。また、 では、ドキュメント ルート パスを パスと同じに設定します。その後、Laravel プロジェクトのデフォルトの CORS ハンドラーが正常に動作し始めます。
Hot Questions
function_exists() はカスタム関数を決定できません
2024-04-29 11:01:01
Google Chromeのモバイル版を表示する方法
2024-04-23 00:22:19
子ウィンドウは親ウィンドウを操作しますが、出力は応答しません。
2024-04-19 15:37:47
親ウィンドウには出力がありません
2024-04-18 23:52:34
CSS マインド マッピングに関するコースウェアはどこにありますか?
2024-04-16 10:10:18
Hot Tools
vc9-vc14 (32+64 ビット) ランタイム ライブラリ コレクション (以下のリンク)
phpStudy のインストールに必要なランタイム ライブラリのコレクションをダウンロードします。
VC9 32ビット
VC9 32 ビット phpstudy 統合インストール環境ランタイム ライブラリ
PHP プログラマー ツールボックスのフルバージョン
プログラマ ツールボックス v1.0 PHP 統合環境
VC11 32ビット
VC11 32ビットphpstudy統合インストール環境ランタイムライブラリ
SublimeText3 中国語版
中国語版、とても使いやすい
ホットトピック
Douyin レベル価格表 1-75
20338
7
20338
7
Wi-FiにIPが割り当てられていないことが表示される
13531
4
13531
4
確認コードを受け取るための仮想携帯電話番号
11853
4
11853
4
Gmailメールのログイン入り口はどこですか?
8836
17
8836
17
Windows セキュリティ センターをオフにする方法
8421
7
8421
7
人気の記事
2025 年の仮想通貨市場のトップ 10 トレンドの予測: 次のトレンドはどこでしょうか?
2025-11-07
By DDD
通貨サークル内で先住犬プロジェクトを特定するにはどうすればよいですか?ゼロコインの罠とリスク警告を回避する
2025-11-07
By DDD
CSS @media クエリの優先順位とルール カバレッジの問題を解決するためのチュートリアル
2025-11-07
By DDD
鉄道 12306 の支払いに失敗した注文はまだ存在しますか?_鉄道 12306 の支払いに失敗した注文の処理方法
2025-11-07
By DDD
インストール後にソフトウェアで win10 フォントが見つからない場合の対処法_win10 フォントのインストールと識別方法
2025-11-07
By DDD





