我現在的情況是
https://www.example.com/link.php? link=48k4E8jrdh
我想達到的目的是得到這個URL,而不是=
https://www.example.com/48k4E8jrdh
我在網上找過,但沒有成功:(
)誰能幫幫我,解釋一下這是怎么一回事?
這就是我的情況。
這就是我現在的情況(我的方向正確嗎?
RewriteEngine On
RewriteRule ^([^/]*)$ /link.php?link=$1
uj5u.com熱心網友回復:
RewriteRule ^([^/]*)$ /link.php? link=$1
這很接近,但它也將匹配/link.php(被重寫的URL),所以將導致無休止的重寫回圈(500 Internal Server Error回應回傳到瀏覽器)。
你可以通過簡單地使重寫詞的限制性更強來避免這種回圈。除了斜線(即[^/])之外,你可以匹配任何斜線和點之外的東西,所以它不會匹配link.php中的點,以及任何其他靜態資源。
例如:
RewriteRule ^([^/. ]*)$ link.php?link=$1 [L]
如果這是要作為最后一條規則,你應該包括L標志。嚴格來說,如果它已經是最后一條規則,你就不需要它了,但是如果你添加了更多的指令,你就需要記住添加它了!
如果你想把它變成最后一條規則,你就需要把它變成最后一條。
如果URL中的id應該只由小寫字母和數字組成,就像你的例子一樣,那么考慮只匹配需要的內容(例如:[a-z0-9])。一般來說,重構函式應該根據需要進行限制。另外,你希望有多少個字符?目前你允許從nothing到 "無限 "長度。
如果不清楚的話,你仍然需要將你在你的應用程式中鏈接到的實際URL改為規范的形式。即https://www.example.com/48k4E8jrdh。
更新:
它起作用了,但是現在網站總是看到那個頁面,不管它是否是
。link.php?所以現在的情況是這樣的。example.com/idu33d3dh#dj3d3j而如果我只是這樣做。example.com那么它就一直回到link.php
這是因為regex ^([^/.]*)$ 匹配0個或更多的字符(由* 量詞表示)。你可能希望至少匹配一個(或一些最小)的字符?例如,為了匹配1到32個字符,將量詞從*改為{1,32},即:^([^/.]{1,32})$。
巧合的是,片段識別符號(fragid)(即#之后的所有內容)并沒有被傳遞給服務器,所以這并不影響使用的重碼(服務器端)。fragid僅由客戶端代碼(JavaScript和HTML)使用,所以嚴格來說不是鏈接值的一部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/323786.html
標籤:
