iT邦幫忙

0

CodeIgniter 在IIS中只會呈現預設頁面

  • 分享至 

  • xImage

各位先進好
小弟我的ci4只會呈現預設頁面,
已照官方的這篇文章故障排除 — CodeIgniter4 4.1.5 說明文件 (monkenwu.github.io)
進行修正後還是一樣,
不曉得要怎麼解決?

demo下載位置:
https://drive.google.com/file/d/18rWB3jKDJ1YEeCaykjc5qbJOHKD4btab/view?usp=sharing

環境:

Windows 11 + IIS + URL Rewirte
PHP 8.1.7
CodeIgniter 4 (透過composer安裝)

嘗試

http://my.localhost.tw/Home/index
http://my.localhost.tw/Home/index2
皆為預設頁面

  1. 照這篇文章故障排除 — CodeIgniter4 4.1.5 說明文件 (monkenwu.github.io)

public $indexPage = 'index.php'; 改成 public $indexPage = 'index.php?';

  1. 設定URL Rewirte

    查看IIS Log也看不出什麼

如果勾選紀錄重寫的URL的話log看起來也正常

  1. 一切重來,重新composer安裝

Code

.env

app.defaultLocale = 'zh-TW'
app.appTimezone = 'Asia/Taipei'
app.baseURL = 'http://my.localhost.tw/'

public\web.config

<?xml version="1.0" encoding="UTF-8"?>
  <configuration>
      <system.webServer>
        <rewrite>
          <rules>
              <rule name="Index">
              <match url="^(.*)$" />
              <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
              </conditions>
                    <action type="Rewrite" url="index.php?/{R:1}" logRewrittenUrl="true" />
            </rule>
          </rules>
        </rewrite>
      </system.webServer>
</configuration>

Config\App.php

只有改以下,其他預設

public $baseURL = 'http://my.localhost.tw';
public $indexPage = 'index.php?';
public $defaultLocale = 'zh-TW';
public $appTimezone = 'Asia/Taipei';

Controller

<?php

namespace App\Controllers;

class Home extends BaseController
{
	public function index()
	{
		return view('welcome_message');
	}

	public function index2()
	{
		return view('welcome_message2');
	}
}

View

welcome_message.php 是ci4的預設頁面

welcome_message2.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome to CodeIgniter 4!</title>
</head>
<body>

demo2

</body>
</html>

解決方法

沒有,目前無解,
只好把XAMPP裝回來

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2

首先,你得先了解是否有先做好RW規則的設定。
再來,你因該知道 index 是魔術函式。
是預設物件會運行的地方。

也就是說當你用 http://域名/ 會先找index運行。
但你要運行 index2 則是需要跑 http://域名/home/index2 的。

看更多先前的回應...收起先前的回應...
舜~ iT邦高手 1 級 ‧ 2022-10-13 00:09:58 檢舉

恩恩是的,預設 http://域名/ 實際是 http://域名/Home/index,會RW成http://域名/index.php?/Home/index

http://域名/Home/index2,會RW成http://域名/index.php?/Home/index2,iis log目前看起來是符合預期,但實際顯示卻還是預設頁面

$indexPage = 'index.php?'
改成
$indexPage = ''

試試

CI我很久沒玩了。記得跑RW時。
原先的index.php設定要改成空值或是 / 的樣子。

其實你的RW值就覺得怪怪的

舜~ iT邦高手 1 級 ‧ 2022-10-13 08:53:18 檢舉

改空值還是一樣,web.config是我copy網路上的,更新到文章了

舜~ iT邦高手 1 級 ‧ 2022-10-13 10:17:46 檢舉

web.config 原本是 index.php/{R:1},嘗試改成index.php?/{R:1} 還是不行

舜~ iT邦高手 1 級 ‧ 2022-10-13 10:18:36 檢舉

您很久沒玩CI了,您目前改玩什麼? laravel?

嗯,現在都是 laravel 沒錯。
CI其實也只碰到3,4就沒啥碰了。

之前4剛出來有碰一陣子。但還是比較喜歡用laravel。
所以就沒在玩它了。

不過就之前玩CI的經驗,他的RW規則跟設定檔確實有點討厭。
我一開始在處理時。(那時還是2)。著實也搞了好久。才成功。

IIS用的RW規則會比較特殊。我怕你是碰上這個問題。

給你我之前的做法。我當時也是設定檔,RW搞了好久。
最後將設定全數還原再重新搞一次才成功的。

舜~ iT邦高手 1 級 ‧ 2022-10-14 09:45:00 檢舉

我周末再試試看,再步行我想我應該也差不多要跳去laravel了~~哈哈

2
揮揮手
iT邦研究生 5 級 ‧ 2022-10-13 11:24:37

應該跟星空大說的一樣
我用CI3 利用 htaccess 來處理
您可以嘗試使用
http://my.localhost.tw/index.php/Home/index
http://my.localhost.tw/index.php/Home/index2
是否會正確顯示
再找看看去除index.php的rw語法

我有看到您的log 記錄了

嘗試使用cmd line
來測試執行狀況顯示的資料

還是結果其實只是很簡單得IIS 沒重啟而已

附上相關討論不知道能幫到您嗎
https://stackoverflow.com/questions/17676920/codeigniter-showing-only-default-controller

舜~ iT邦高手 1 級 ‧ 2022-10-14 09:42:49 檢舉

雖然已重啟過沒成功,不過IIS重啟後問題解決的狀況曾經遇到,當時真的很無言~~哈哈

我要發表回答

立即登入回答