簡體   English   中英

Apache htaccess 強制小寫並刪除斜杠

[英]Apache htaccess force lowercase and remove trailing slash

我正在嘗試將所有 URL 重定向為小寫並刪除尾部斜杠。

我的 htaccess 文件目前看起來像這樣:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond expr "tolower(%{REQUEST_URI}) =~ /(.*)/"
    RewriteRule [A-Z] %1 [R=308,L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [R=308,L]
</IfModule>

這確實有效,但是它會一個接一個地進行兩次重定向。 第一個重定向強制小寫,第二個重定向刪除尾部斜杠。

如何將這兩個規則合並為一個重定向?

您不需要實際合並這兩個規則以減少重定向的數量。 您可以顛倒這兩個規則的順序,並在刪除尾部斜杠的規則中始終將 URL 轉換為小寫。

例如:

# Remove trailing slash AND convert to lowercase
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond expr "tolower(%{REQUEST_URI}) =~ m#(.+)/$#"
RewriteRule /$ %1 [R=308,L]

# Convert remaining URLs to lowercase
RewriteCond expr "tolower(%{REQUEST_URI}) =~ /(.*)/"
RewriteRule [A-Z] %1 [R=308,L]

結合這兩個規則的一個潛在問題(不增加額外的復雜性)是您避免將 URL 轉換為映射到目錄的小寫字母(這可能是也可能不是問題),因為您只能刪除非目錄上的尾部斜杠。

請注意,我在第一條規則(以前是第二條規則)中使用了替代的正則表達式語法,以避免在正則表達式中轉義文字斜杠。 RewriteRule模式現在也可以簡化,因為我們只需要斷言 URL 以斜杠結尾。

請注意,如果這些指令是強制性的,則應刪除<IfModule>包裝器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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