95341
次のような環境で作業をしています。  
laravel10 + vue3 + inertia + vite + typescript + tailwindcss

xserverを利用しています。各状況は次のとおりです。

> Laravelフォルダは ~/source/my_project/  
>  公開フォルダは ~/example.com/public/  
>  公開URLは https://example.com/

/soruce/my_project/public と ~/example.com/public/ にシンボリックを貼りました。

無事に <https://example.com/> にて表示されるようになりました。  
すべてのリンクの動作も問題が有りません。

### フォルダを１つ下げると問題発生

運用において、１つフォルダを下げてLaravelを表示しようとしました。  
新たな状況は次のとおりになります。toolというフォルダ配下にしました。

> Laravelフォルダは ~/source/my_project/ ※変更なし  
>  公開フォルドは ~/example.com/public/tool/  
>  公開URLは https://example.com/tool/

シンボリックリンクも ~/example.com/public/tool/ から貼り直しています。  
.env の APP_URL も <https://example.com/tool> に変更

念のためキャッシュもすべて削除

```

    php artisan config:clear
    php artisan cache:clear
    php artisan route:clear
    
```

実際にアクセスしてみると、次のような挙動が発生します。  
<https://example.com/tool/> → https://example.com/tool/tool とURL表示  
コンテンツ部分は問題なく表示されています。URL部分だけ何故か tool が二重になります。

内部のリンクはすべて <https://example.com/tool/xxxxxx> のようになっています。  
クリックするとちゃんと表示されます。  
しかし、URL部分は <https://example.com/tool/tool/xxxxxx> になります。

URLの表示だけがオカシイ状況です。

そのため、https://example.com/tool/tool に直接アクセスすると 404 エラー  
リンクから移動後、https://example.com/tool/tool/xxxxxx でリロードすると 404 エラー

という不思議な状況にあります。

.htaccess は全くいじっていません。  
最初の <https://example.com/.htaccess> を削除しましたが状況変わらずです。

このような状況が発生する原因は何が考えられるでしょうか？  
よろしくお願いします。
CC BY-SA 4.0
2023-05-25T02:40:53.157
94970
2023-06-24T01:10:13.703
2023-05-25T08:22:35.137
7980
7980
question
php laravel
LaravelサイトのURL変更で、なぜかフォルダ名が二重になってしまう
こちらで同じ現象と、その解決方法がありました。

[root directory is displayed twice in URL on load and
reload](https://stackoverflow.com/questions/71943581/root-directory-is-
displayed-twice-in-url-on-load-and-reload)

vendor/inertiajs/src/Response.php の toResponse() メソッドを書き換えると…  
もっとも、venderフォルダ内のファイルの変更は上書きリスクがあるので、悩ましい。
CC BY-SA 4.0
2023-05-25T11:41:57.760
94976
2023-05-25T11:41:57.760
7980
94970
answer
パッチを当てることで対応しました。

## composer 管理ファイル

  1. composer-patches をインストール  
`composer require cweagans/composer-patches`

  2. 問い合わせには y
```     Do you trust "cweagans/composer-patches" to execute code and wish
to enable it now?

     (writes "allow-plugins" to composer.json) [y,n,d,?]
    
    cweagans/composer-patches」のコード実行を信頼し、今すぐ有効化したいですか？
    (composer.jsonにallow-pluginsを書き込む) [y,n,d,?]。
    
```

  3. rootに`patches_composer` をフォルダを作成する ※package.json用の patchesフォルダと分ける

  4. 対象ファイルのバックアップを作成する cp コピー元 コピー先

`cp vendor/inertiajs/inertia-laravel/src/Response.php
vendor/inertiajs/inertia-laravel/src/Response.php.orig`

  5. 対象ファイルを編集する

  6. 動作確認

  7. 差分ファイルを作る

`diff -u 変更前ファイル名 変更後ファイル名 patches_composer/差分記録ファイル名`

`diff -u vendor/inertiajs/inertia-laravel/src/Response.php.orig
vendor/inertiajs/inertia-laravel/src/Response.php > patches_composer/inertia-
laravel-response.patch`

  8. パッチファイルの修正

patches_composer/inertia-laravel-response.patch

※composer.jsonでライブラリを指定するが、その「フォルダ」から相対指定

```     --- vendor/inertiajs/inertia-laravel/src/Response.php.orig
2023-05-26 07:43:20.246192609 +0900

    +++ vendor/inertiajs/inertia-laravel/src/Response.php   2023-05-26 07:41:02.059394179 +0900
    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 先頭行がパッチ対象ファイル
    --- src/Response.php    2023-05-26 07:43:20.246192609 +0900
    +++ src/Response.php    2023-05-26 07:41:02.059394179 +0900
    @@ -99,7 +99,7 @@
             $page = [
                 'component' => $this->component,
                 'props' => $props,
    -            'url' => $request->getBaseUrl().$request->getRequestUri(),
    +            'url' => $request->getRequestUri(),
                 'version' => $this->version,
             ];
    
```

  9. **`composer.json`** ファイルにパッチの情報を追加
```     {

        "require": {
            "php": "^7.3",
            // 他のパッケージ
        },
        "extra": {
            "patches": {
                "inertiajs/inertia-laravel": {
                    "修正の説明": "patches_composer/inertia-laravel-response.patch"
                }
            }
        },
        // その他のセクション
    }
    
```

composer update -vvv でデバッグモードになる

composer install でパッチの実行 ※updateでは実行されない

> ⚠️ 注：「can't find file to patch at input line 3」というメッセージは正常であり、パッチのエラーではない  
>  <https://maxcluster.de/en/knowledge-base/managedcenter/fasteristableexists>

## package.json 管理ファイル

  1. patch-packageをインストール

`npm install --save-dev patch-package`

  2. プログラムの修正 対象ファイルを修正する

  3. パッチファイルを作成

`npx patch-package @inertiajs/vue3`

  4. **`patches`** ディレクトリに **`@inertiajs+vue3+1.0.0.patch`** というファイルが作られる

  5. `package.json` ファイルを開き、`scripts` セクションに `postinstall` スクリプトを追加
```     "scripts": {

      "postinstall": "patch-package"
    }
    
```

  6. 以上で、`npm install, npm update` が実行されてアップデートされたとしても、パッチの状態に更に上書きをしてくれる

  7. 公式ファイルが更新されてパッチが不要になったら、  
**`patches`** ディレクトリの **`@inertiajs+vue3+1.0.0.patch`** を削除すればOK
CC BY-SA 4.0
2023-06-24T01:10:13.703
95341
2023-06-24T01:10:13.703
7980
94970
answer