1 回答

TA貢獻1875條經驗 獲得超5個贊
當我添加此代碼并轉到
illustrations.php?category=cats
它時,不會更改瀏覽器欄中的 URL。
對,那是正確的”。
您在內部發布的代碼將URL /category/cats
(您應該在 HTML 源中鏈接到的 URL)重寫回實際的文件系統/URL 路徑:/illustrations.php?category=cats
。為了使“漂亮”的 URL /category/cats
“有效”,這是必需的。
您不能.htaccess
僅使用 - 如果這就是您所暗示的內容來更改 URL 結構。您確實需要實際更改 HTML 源中的物理 URL。
您可以使用 實現從規范 URL 的外部重定向(而不是重寫),但請注意,這只是為了有利于 SEO(以及可能已經鏈接到舊 URL 的第三方)。如果您要更改現有的 URL 結構并且 SEO 是一個問題,那么這是一個必要的附加步驟,但它不是您網站“工作”的一部分。/illustrations.php?category=cats
/category/cats
.htaccess
我如何仍然保留
cat_id
參數
您需要在 URL 中包含參數的值。cat_id
例如。/category/cats/1
(正如 @arkascha 在評論中建議的那樣)或/category/1/cats
- 取決于哪個值更重要。我會把更重要的值放在第一位,因為共享時 URL 可能會被意外裁剪。
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/?category/(.*?)/?$ /illustrations.php?category=$1 [L]
這條規則可以簡化。文件系統檢查相對昂貴??磥砟梢酝ㄟ^使正則表達式更加具體來刪除這兩個內容。例如??梢?code>/category/1/cats映射到文件嗎?您需要可以訪問目錄嗎?我希望這兩個問題的答案都是“否”。
我還將決定是否允許尾隨斜杠,而不是同時允許兩者(如您當前的規則所示)。嚴格來說,這會創建重復的內容(兩個 URL;相同的內容),因此需要額外的步驟來解決。您的示例 URL 不包含尾部斜杠。
因此,您可以將規則簡化為以下形式,以便重寫/category/1/cats
(無尾部斜杠)為/illustrations.php?category=cats&cat_id=1
RewriteEngine On RewriteRule ^category/(\d+)/([\w-]+)$ /illustrations.php?category=$2&cat_id=$1 [L]
假設cat_id
可以是 1 位或多位數字 ( 0-9
)。并且category
僅限于以下字符:a-z
、A-Z
、0-9
、_
(下劃線)、-
(連字符)。
對于正則表達式,最好盡可能限制。.
通過省略上述規則中最后一個路徑段中的點 ( ),它無法匹配物理文件(假設所有文件都有文件擴展名)。
- 1 回答
- 0 關注
- 97 瀏覽
添加回答
舉報