搜尋

首頁  >  問答  >  主體

使用 .htaccess 透過查詢字串將檔案路徑重寫為檔案名

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

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

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粉035600555P粉035600555336 天前565

全部回覆(1)我來回復

  • P粉463824410

    P粉4638244102024-01-02 10:59:01

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

    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

    回覆
    0
  • 取消回覆