[英]Rewriting URLs with .htaccess
我正在嘗試將這樣的網址http://example.com/page.php?user=x&post=x
轉換為http://example.com/blogs/user/post
這是我到目前為止的代碼,不確定我是否遺漏了什么或做錯了什么,因為它到目前為止還沒有成功。
RewriteEngine On
RewriteRule ^blogs/([a-z0-9\-]+)/([0-9]{1,11})/$ page.php?user=$1&post=$2 [L]
編輯:進行一些修改后,它現在返回一個錯誤 404 錯誤,表示page.php
。 我肯定知道文件在那里。
第二次編輯:解決了 404 問題。
post
參數也是可選的。
user
可以混合使用 A-z0-9(無字符限制)
post
只能是 0-9 和最多 11 個字符的長度
根據http://htaccess.madewithlove.be/ ,這應該有效:
RewriteEngine On
RewriteRule ^blogs/([a-z0-9-]+)/([0-9]+)$ /page.php?user=$1&post=$2 [L]
這http://example.com/blogs/abc_123/67890
http://example.com/page.php?user=abc_123&post=67890
轉換為http://example.com/page.php?user=abc_123&post=67890
。
最顯着的變化是您顯然不能在規則的第一個組件中使用前導/
,但我還刪除了帖子 ID 上的{11}
約束,因為這不太可能產生預期的效果。
嘗試
RewriteRule ^blogs/?([a-z0-9]*)?/?$ page.php?user=$1&post=$2 [NC,L]
?
表示匹配是可選的。 因此對於/?
斜線是可選的。
對於^blogs/?
之后的第二部分^blogs/?
([a-z0-9]*)?
如果刪除?
和*
從上面變成這樣:
RewriteRule ^blogs/?([a-z0-9])/?$ page.php?user=$1&post=$2 [NC,L]
user
將不再是可選的,必須完全匹配。 示例http://blogs/John
; 如果你把+
代替 * 如下:
RewriteRule ^blogs/?([a-z0-9]+)/?$ page.php?user=$1&post=$2 [NC,L]
user
需要匹配至少 1 個字符。 例如: http://blogs/J
如果你把*
星號如下:
RewriteRule ^blogs/?([a-z0-9]*)/?$ page.php?user=$1&post=$2 [NC,L]
它可以匹配到零長度。 例如: http://blogs/
。 幾乎就像可選的。
如果匹配失敗,您將收到404 Not found error
此代碼提供了所需的結果...
RewriteRule ^blogs/([a-z0-9]+)?/?$ page.php?user=$1 [NC,L]
RewriteRule ^blogs/([a-z0-9]+)?/?([0-9]+)?/?$ page.php?user=$1&post=$2 [NC,L]
正如 Fraxtil 指出的那樣,我還修改了帖子 ID 約束。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.