iT邦幫忙

0

如何寫一個讓某資料夾裡面的 .php 檔案在訪問的時候都忽略副檔名?

RewriteRule ^admin/user$ admin/user.php

我目前會寫的只有這種隱藏法
一個檔一個檔去建立

然後放到網站根目錄的 /.htaccess 中
只是我現在想實現的是「某一個資料夾」裡面的 php 檔案都忽略副檔名就好,而且不用一個一個建?

比如某個資料夾裡面有五十個 .php 腳本

/test/1.php
/test/2.php
/test/3.php ....
/test/50.php

如何針對 test 裡面的副檔名隱藏就好呢?不會影響到其他資料夾的腳本

1 個回答

0
淺水員
iT邦新手 2 級 ‧ 2019-02-06 21:58:59
最佳解答

大概像下面這樣?

檔案結構

[root]
  ├ .htaccess
  ├ getTest.php
  └ [test]

.htaccess

RewriteEngine On

#禁止直接存取資料夾內的檔案
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^test/(.*)$ - [F,L]

#轉交由 getTest.php 處理
RewriteRule ^test/(.*)$ getTest.php/$1 [L]

getTest.php

<?php
require(__dir__. $_SERVER['REQUEST_URI'].'.php');
看更多先前的回應...收起先前的回應...
小松菜奈 iT邦研究生 3 級 ‧ 2019-02-07 01:07:23 檢舉

如果在網站根目錄的 .htaccess 去隱藏某資料夾的php副檔名,這樣可以嗎?就單純隱藏就好,不用再交給腳本去控制

小松菜奈 iT邦研究生 3 級 ‧ 2019-02-07 01:24:52 檢舉

我以為是這樣寫

RewriteRule ^test/([^./]+)/?$ test/$1.php [L]

但似乎不是

淺水員 iT邦新手 2 級 ‧ 2019-02-07 01:27:54 檢舉

下面這比較接近你原本的

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^test/([^\/]+)\/?$ test/$1.php [L]

不過使用者如果打 網址/test/xxx.php 一樣可以抓到檔案就是

小松菜奈 iT邦研究生 3 級 ‧ 2019-02-07 11:23:54 檢舉

那有辦法讓使用者打 php 的時候報錯或找不到嗎

小松菜奈 iT邦研究生 3 級 ‧ 2019-02-07 11:30:00 檢舉

這個還是不行呢 RewriteRule ^test/([^\/]+)\/?$ test/$1.php [L] 真是怪啊

小松菜奈 iT邦研究生 3 級 ‧ 2019-02-07 11:30:19 檢舉

我現在的做法是直接丟 htaccess 到那個我要隱藏的 php 文件夾
htaccess 內容是

RewriteRule ^([^./]+)/?$ $1.php [L]

雖然這樣可行,只是全都php腳本卻多個 .htaccess 實在是礙眼
所以我想說靠網站根目錄的 .htaccess 做更改

淺水員 iT邦新手 2 級 ‧ 2019-02-07 23:12:40 檢舉
  1. 目前我這邊要做到「禁止直接訪問資料夾內PHP檔案,但透過rewrite可以訪問」,就只有使用其他PHP檔案處理的方式(事實上很多框架都是這樣做)。
  2. 上面除了第一點的方法(透過其他PHP)之外,不管是你或是我提出的方法,都無法阻擋直接訪問 php 檔案。判斷是因為 rewrite 之後,還會再重新跑一次 .htaccess ,因此會連 rewrite 後的也一起擋掉。這部分看有沒有其他高手願意出手了。

我要發表回答

立即登入回答