規則的工作原理是:
RewriteRule <pattern_A> <target_B>
它總是從<pattern_A>
作品<target_B>
,從來沒有倒過來,也沒有在2個請求該規則的「鏈接」。 top part of this answer解決了當「URL爲其他URL更改」時發生的兩種不同情況。
規則,你有一個沒有查詢字符串的URL,並在內部用一個查詢字符串重寫它的PHP文件。瀏覽器沒有看到發生這種情況,這是「幕後」。當你說你想讓地址欄顯示沒有查詢字符串的URL時,你首先需要找到一些其他的URL,並且URL需要在外部重定向瀏覽器。所以,在你已經擁有的規則:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /profile\.php\?id=([^&\ ]+)
RewriteRule^/users/%1? [L,R=301]
,對請求字符串,而不是請求URI(其被沿着URL處理管道和重寫引擎更改)相匹配,提取ID,並重定向瀏覽器通過使用R=301
標誌轉換爲不帶查詢字符串的新URL。
你真的需要改變所有內容,讓他們使用,而不是依靠重定向瀏覽器的一個非常繁瑣和效率低下的方式,然後在內部重寫回原來的URL清潔尋找網址。
我發現這一個,我使用相同的代碼,但他們沒有在地址欄中保留縮短的網址。這就是爲什麼我問 – Dotan