使用 .htaccess 透過查詢字串將檔案路徑重寫為檔案名
P粉035600555
P粉035600555 2024-01-01 15:35:08
0
1
537

我在使用查詢字串重寫檔案路徑時遇到問題

我正在嘗試取得如下所示的網址:

https://url.com/products/1_Samsung_Galaxy

#

並像這樣重寫對我的伺服器的請求:

https:url.com/model.php?id=1&title=Samsung_Galaxy

這是我的 htaccess 到目前為止的樣子:

RewriteEngine On

#rewrite no ending files to .php if file doesn't exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !products/
RewriteRule ^([^.]+)$ .php [NC,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/products/([1-9]+)(.*)$ model.php?id=&title= [NC,L]

使用當前配置,請求將發送到與model.php 位於同一目錄中的名為products.php 的文件,但似乎位於不同的目錄中,因為具有相對路徑的products.php 中引用的一些腳本文件會拋出異常它們所包含的物件不存在的錯誤。

實際上,我的主要問題是我不知道 apache 語法或它是如何運作的,而且我很難找到可以了解 apache 的資源。由於某種原因,apache 文件沒有太大幫助。如果有學習如何編寫 apache 檔案的好資源,我也很樂意查看。

P粉035600555
P粉035600555

全部回覆(1)
P粉463824410

您的問題有點模糊,但我認為這就是您正在尋找的:

RewriteEngine On

# rewrite /products/ to /model.php/.....
RewriteRule ^/?products/(\d+)(.*)$ /model.php?id=&title= [L]

# rewrite to "...php" if such file exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]

如果在 http 伺服器的主機配置中實施,這些規則將會起作用。或者,如果您無法存取該文件,則可以在位於 http 主機的 DOCUMENT_ROOT 資料夾中的分散式設定檔(“.htaccess”)中存取。

與您的嘗試的主要區別:

  • 目標路徑被寫為絕對路徑。這解決了請求被重寫到不同資料夾的問題。
  • 首先實作 /model.php 的異常重寫,因此在檔案的較高位置執行,因為規則是從上到下處理的。這節省了一些條件。

您也提到您「不熟悉 apache 語法」並且很難找到資源來學習它。

我總是推薦 apache 模組的官方文件。它們品質卓越,並提供了很好的範例:

https://httpd.apache.org/docs/current/mod /mod_rewrite.html

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!