1 回答

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