使短網址和長網址在同一域上一起使用(RewriteRule)

使短網址和長網址在同一域上一起使用(RewriteRule)

長話短說,我想兩者兼得example.com/aJ5example.com/any-other-url一起工作。我正在使用 apache,不太擅長編寫正規表示式。

我已經有一個全局的RewriteRule,它將所有內容發送到應用程式入口點。我需要的是告訴 apacheif length($path) is <= 5 chars然後重寫到另一個位置。

我知道我可以在正規表示式中使用{1,5}類似的語法,但真的不知道這是否是我正在尋找的。

我想在 Web 伺服器層級而不是 php 層級實現此功能。任何幫助表示讚賞。

答案1

如果您可以假設該-字元不會包含在短 URL 中:

RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9]){1,5} 
RewriteRule ^ /app-entry-point?url=%1 [L]

這是未經測試的,但類似的東西應該​​可以工作。本質上,您傳遞的是一個條件 ifREQUEST_URI之類的東西/abc12,控制切換到您想要的任何處理程序。它將跳過超過 5 個字元或包含“slug”字元“-”或下劃線的 URL。

%1最後一個RewriteCond反向引用將擴展為短 URL。將其置於其他規則之上以首先強制執行此操作 - 使用該[L]標誌,它將停止重寫 URL 並將控制權傳遞給應用程式。

答案2

 RewriteCond %{REQUEST_URI}   ^/.{1,5}$
 RewriteRule ...

這將匹配長度為 1 到 5 個字元的任何請求,並將運行以下 RewriteRule。任何超過此長度的值都不會運行 RewriteRule。 REQUEST_URI 變數是瀏覽器傳遞給 Web 伺服器的變數。同樣的事情可以在單一 RewriteRule 中處理,但如果需要的話,上面允許連結。

 ^/.{1,5}$

^= 符合字串的開頭
/= 僅符合正斜線
。 = 符合不是換行符的任何一個字元
{1,5} = 通知正規表示式引擎匹配前一個字元 1-5 次
$ = 匹配行尾字符

/.{1,5}$構造告訴正則表達式引擎匹配大小為 1-5 的任何字串,該字串後面緊跟著行尾字符,前面緊跟該/字符。

相關內容