簡體   English   中英

使用 .htaccess 重寫 URL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM