台灣最大程式設計社群網站
線上人數
1409
 
會員總數:244789
討論主題:188837
歡迎您免費加入會員
討論區列表 >> PHP >> 關於htaccess的問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
關於htaccess的問題
價值 : 50 QP  點閱數:824 回應數:13

樓主

Jason Chung
門外漢
0 1
68 6
發送站內信

小弟第一次在這邊發文
若有個是不對的請跟我說
我會修正的
在此謝過~

我有一個問題
我用ci框架寫一個網頁
然後用htaccess改寫網址

因為我遇到一個狀況
有寫css內會自帶字形
然後有些自帶的字形並不是去上網抓的
而是跟css是一包的
然後再css內的路徑是寫在那包內
但我把fonts跟css分開放
所以我需要當網址是

http://localhost/application/views/css/fonts/glyphicons-halflings-regular.woff2

要轉成

http://localhost/fonts/glyphicons-halflings-regular.woff2

之類的

但目前寫了幾個後我發現的狀況是

http://localhost/fonts/glyphicons-halflings-regular.woff2 找不到網頁
http://localhost/xxxxxx/fonts/glyphicons-halflings-regular.woff2 找不到網頁
http://localhost/fonts/xxxxx/glyphicons-halflings-regular.woff2 找不到網頁

http://localhost/fonts/ 找的到網頁

但找的到網頁的狀況是我有在router.php上面加入

$route['fonts'] = 'fonts';

才找的到
若是把她改成bbbb

$route['bbbb'] = 'fonts'

就會找不到網頁
但是看log是有改變
可我一直測試不出來哪邊有問題
有附上我的log資料與htaccess的資料
還請有經驗的大大指點迷經一下
我已經卡了好久了
感謝您



htaccess的規則如下:


htaccess的log如下:


搜尋相關Tags的文章: [ htaccess ] , [ fonts ] ,
本篇文章發表於2018-08-24 17:09
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

彩虹
檢舉此回應
有兩個辦法可以解決,提供您參考

1.我建議你把 「css」、「fonts」 全部放在 assets 資料夾裡
(這樣比較統一,因為assets通常是放 js、css、images的地方)

放進去之後,把 .htaccess 的第五行、第六行刪掉

之後你可以在網址列測試看看
http://localhost/assets/fonts/glyphicons-halflings-regular.woff2
如果正常就代表你成功了

最後要去去修改 css 檔案裡引入 fonts 的路徑,例如你目前的

改成相對路徑



2.在第8行補上 fonts,如下
RewriteCond $1 !^(uploads|index\.php|.*\images|.*\.js|.*\.css|.*\.png|.*\.ico|assets|robots\.txt|fonts|$)
然後一樣把 .htaccess 的第五行、第六行刪掉

本篇文章回覆於2018-08-25 10:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Jason Chung
檢舉此回應
彩虹大大好
您說的方法其實我有思考過
但這樣會有一個缺點
變成是以後只要有用到非自己開發的css的話
都會需要去修改他的路徑

所以我才會想說直接在.htaccess上面動手腳
只要網址中帶有fonts或是載入的檔案為woff或是woff2等指定檔案的時候
就會導入到特定的網址去

這樣的話以後不論遇到什麼樣的路徑
都可以透過那隻程式找到正確的檔案
本篇文章回覆於2018-08-27 09:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

彩虹
檢舉此回應
不是呀,那是因為你直接連對方的資源,然後直接檢視程式原始碼複製回來才會遇到這問題

通常非自己開發的css,像是現在常見 RWD css 框架 bootstrap.css,會提供給我們使用者下載的package
下載到本機後,你會發現 images、fonts 都也打包下來了
然後你再打開.css檔案,會發現其實已經是相對路徑

另外你沒有如果你今天堅持要用 http://localhost/fonts/.....(省略)
等到你網站上線後,你覺得別人瀏覽你網站時,會找得到路徑嗎?
別人會有 http://localhost/ 嗎?

我相信會是 404 的結果

你思考看看
本篇文章回覆於2018-08-27 10:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

Jason Chung
檢舉此回應
您誤會我的意思
我沒有非要
http://localhost/fonts/.....這樣用
而且實際上產生的網址為
http://localhost/application/views/css/fonts/glyphicons-halflings-regular.woff2

真的上了環境後的網址也是
http://wwww.xxxx.idv.tw/application/views/css/fonts/glyphicons-halflings-regular.woff2

而且目前我的htaccess的測試解果其實也不是404之類的
都是ci的框架然內的not page

所以我只是要把網址中有符合特定的文字的的網址去過濾出來

本篇文章回覆於2018-08-27 11:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

Jason Chung
檢舉此回應
我的意思是說

例如
http://wwww.xxxx.idv.tw/application/views/css/fonts/glyphicons-halflings-regular.woff2,因為網址中帶有fonts,
導頁到http://wwww.xxxx.idv.tw/fonts/glyphicons-halflings-regular.woff2

依據ci的urls的規定網址http://wwww.xxxx.idv.tw/class/function/id,
所以可能會變成http://wwww.xxxx.idv.tw/fonts/fonts/glyphicons-halflings-regular.woff2

讓http://wwww.xxxx.idv.tw/application/views/css/fonts/glyphicons-halflings-regular.woff2通過內部重新定義
讓他可以取得資料
本篇文章回覆於2018-08-27 11:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

彩虹
檢舉此回應
我是不知道為什麼你用起來會特別複雜
而且又為什麼堅持要把 css、fonts這些放到 application呢?
是不是我誤會了什麼?
.htaccess 不是已經預設幫你

我都不會遇到這種問題耶


而且為什麼http://wwww.xxxx.idv.tw/fonts/fonts/glyphicons-halflings-regular.woff2 你要跟 http://wwww.xxxx.idv.tw/class/function/id 做關聯呢?
本篇文章回覆於2018-08-27 13:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

彩虹
檢舉此回應
抱歉剛剛來不及打完就按到送出

我是不知道為什麼你用起來會特別複雜
我都不會遇到這種問題耶

而且又為什麼堅持要把 css、fonts這些放到「 application」,而不放到「assets」呢?
是不是我誤會了什麼?
.htaccess 不是已經預設幫你排除一些資料夾或檔案,例如 「assets」,這些檔案、資料夾就不會再被 ci route 影響
明明可以直接連結到該檔案 http://wwww.xxxx.idv.tw/assets/fonts/glyphicons-halflings-regular.woff2

你覺得還需要管什麼「規定網址http://wwww.xxxx.idv.tw/class/function/id」嗎?

我試問,那你圖片連結又怎麼做呢?
是不是也要走 CI Route? 也就是你所說的 規定網址


本篇文章回覆於2018-08-27 14:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

彩虹
檢舉此回應
官方文件我也建議你多看一下
https://codeigniter.org.tw/userguide3/general/urls.html?highlight=htaccess

在上述的例子中,所有的 HTTP request 除了現有的資料夾以及現有的檔案,其他請求會被視為通過你的 index.php 去請求。
比方說如果你的專案在 http://localhost/CI/index.php 如果放在 CI 這個目錄下,您有個 images 資料夾、以及 index.php 還有 robots.txt 這三個東西必須公開存取的,那麼你可以這樣做:

RewriteEngine on
RewriteBase /CI
RewriteCond $1 !^(index\.php|images|robots\.txt|$)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

以上這段你先看一下


然後我們再來探討:
1.你的「application」是現有的資料夾以及現有的檔案,所以會透過 index.php 去做請求,也就是你說的「規定網址 http://wwww.xxxx.idv.tw/class/function/id」
因此,當你把 css, fonts 放在 application/views 裡面,這時候你當然無法直接透過此網址,去連結到檔案
http://wwww.xxxx.idv.tw/application/views/css/fonts/glyphicons-halflings-regular.woff2 是會出現 404的page

2.何謂公開存取?
當你設定公開存取後,就可以直接透過網址去要到資源
假設你在這邊補上 「doc」 的公開存取
RewriteCond $1 !^(index\.php|images|robots\.txt|doc |$)
這時候網址直接打
http://wwww.xxxx.idv.tw/doc/xxx.doc 就可以直接連結到
本篇文章回覆於2018-08-27 14:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

彩虹
檢舉此回應
你提到

而且目前我的htaccess的測試解果其實也不是404之類的
都是ci的框架然內的not page


有一點我覺的你對404好像不太了解
你現在走的是 CI route,當該 route url 不存在時,你會看到
404 Page Not Found
The page you requested was not found.

這是 CI 幫你處理的畫面

這就是404,懂了嗎

本篇文章回覆於2018-08-27 14:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

Jason Chung
檢舉此回應
恩沒關係

可能是我敘述的問題的方式

讓您無法理解我想要做的東西

所以您會直覺的把東西放到assets問題就會解決

就算把東西放到assets

路徑也不會自己改成assets

還是要進css去修改url的路徑

我就是不想去做這個行為
(修改css中的url的路徑)

因為我的views是放在application裡面的views

我的需求就只是要

http://wwww.xxxx.idv.tw/doc/xxx.doc -> http://wwww.xxxx.idv.tw/doc/aaa/xxx.doc

中間的aaa是htaccess幫我做到的

但我不想把實際網址公開

另外您提到的404問題,我沒有不懂

點數依然給您然後謝謝您的建議
我在自己想方法處理
感謝您
本篇文章回覆於2018-08-27 14:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

Jason Chung
檢舉此回應
其實我只是想做到這個

來源:https://lesca.me/archives/htaccess-rewrite.html

內容:

4.长短地址转换
利用URL重写,我们可以很方便地实现长短地址的转换,但是用重定向就不合适了。
RewriteEngine On
RewriteRule ^grab /public/files/download/download.php
若访问
http://mysite/grab?file=my.zip
则会执行该页面:
http://mysite/public/files/download/download.php?file=my.zip

若訪問
http://localhost/application/views/css/fonts/glyphicons-halflings-regular.woff2
則會執行
http://wwww.xxxx.idv.tw/fonts/glyphicons-halflings-regular.woff2

這樣子而已
本篇文章回覆於2018-08-27 14:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

彩虹
檢舉此回應
這一篇是先回覆你 10樓 的回文

如果你今天統一放在公開存取的資料夾,基本上是不會遇到你說的這個問題
路徑也不會自己改成assets
還是要進css去修改url的路徑

css通常引入font路徑,也不是你想像的那麼複雜,基本上你放在同樣的路徑下,根本連打開css修改都不用

另外 application,是CI的核心,裡面的任何資料夾、檔案本來就不應該公開存取,所以實際網址是連不到的
最大的問題就是你把 css、fonts、images、js 放在 application/views裡面

但你卻又堅定的想放在 application 裡面,然後想透過 htaccess 來改寫網址,你覺得行得通嗎?


而且不一定都要放到assets裡面
assets/css/
assets/fonts/
assets/images/
assets/js/
只是這樣做會比較好,目錄也比較乾淨,htaccess只要排除 assets 即可


你當然也可以放在最外層
但是你htacess就要補很多而已,變成
css/
fonts/
images/
js/



本篇文章回覆於2018-08-27 15:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

Jason Chung
檢舉此回應
我後來找到答案了

來源:https://codeigniter.org.tw/forum/viewtopic.php?f=7&t=6040



解法:



收工.....
這就是我要的
本篇文章回覆於2018-08-30 15:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.