這次就來把網址美化一下吧
1. 開啟mod_rewrite
Shiun@ShiunMac ~ sudo vi /etc/apache2/httpd.conf
啟動Apache的mod_rewrite模組
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
2. 在CI的根目錄下新增.htaccess並加入以下內容
#IfModule代表module有啟動才會執行IfModule內的內容
<IfModule mod_rewrite.c>
#啟動rewrite引擎
RewriteEngine On
#這裡指的是CI的位置,也就是CI位於根目錄下的哪個路徑中
RewriteBase /ci/
#改寫規則一: 所有要往/ci/system下的request都導到index.php下
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ ./index.php?/$1 [L,QSA]
#改寫規則二: 所有要往/ci/application下的request都導到index.php下
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ ./index.php?/$1 [L,QSA]
#改寫規則三: 若網址後的參數不為index.php, images, css, js, robots.txt, favicon.ico任何一項
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico)
#且request的不是一般檔案
RewriteCond %{REQUEST_FILENAME} !-f
#且request也不是資料夾
RewriteCond %{REQUEST_FILENAME} !-d
#將request參數導到index.php下
RewriteRule ^(.*)$ ./index.php?/$1 [L,QSA]
</IfModule>
#如果mod_rewrite沒有啟動的話
<IfModule !mod_rewrite.c>
# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
ErrorDocument 404 /index.php
</IfModule>
3. 重新啟動apache
Shiun@ShiunMac ~ sudo apachectl restart
4. 用新網址瀏覽網頁吧~,少了index.php感覺好看超多~
補充: 由於筆者的根目錄是/~shiun/ws/,因此RewriteBase這行要改成/~shiun/ws/才會動
mod_rewrite補充說明
由於大多Google到的結果都沒針對mod_rewrite為什麼要這麼寫解釋,害筆者心中總少了啥,因此筆者另外收集並補充以上用到的mod_rewrite規則說明1. RewriteCond代表要滿足的條件,若滿足RewriteCond的條件則往下一行繼續執行
2. 若連續出現數行RewriteCond且RewriteCond最後沒有提示OR, AND之類的文字,則預設為AND比對,例如"改寫規則三"就是連續三個RewriteCond的AND比對
3. "改寫規則一"中出現的$1為 ^(.*)$ 這個正規表示式的結果,上述三個改寫規則的^(.*)$指的就是domain name之後的所有文字
例如 aaa.org/index.php?a=b 中的index.php?a=b就是$1
4. 每個改寫規則最後出現的[L, QSA]中的L代表這條改寫規則結束
5. [L,QSA]的QSA代表將Query的參數補到網址的最後面
例如 aaa.org/index.php?a=b&c=d,要是沒有QSA的話rewrite模組會把"?"後所有Query參數砍掉
參考資料
1. [CodeIgniter]如何去掉 URL 中的 index.php
2. 如何透過.htaccess檔,來使用URL redirect/rewrite功能?
3. .htaccess技巧: URL重写(Rewrite)与重定向(Redirect)
Casino Roll
回覆刪除Join casino-roll.com Casino gri-go.com Roll Online wooricasinos.info Casino Roll 2021 kadangpintar