使用 htaccess 重定向到相同 URL 的小写版本
Use htaccess to redirect to lower case version of the same URL
我查看了其他答案,似乎无法正确回答这个问题,我也尝试过 mod_speling,但这似乎无法解决问题
我 运行良好并且将 301 正确,但是随后服务器将 303 给小写版本(如果有大写字母)
所以如果 url 全部是小写它很好,如果不是,它将 301 到正确的 url 大写,然后 303 到最后的 url 全部小写案件。我正在尝试摆脱 303 并使其成为 301。
是否可以将此规则重定向到 url 的小写版本,或者可能需要一条新规则?
^(this-is-static/[a-zA-Z-]+)_([^/]+)$ // [R=301,L]
要完全在 .htaccess
中完成(不推荐),这应该放在 .htaccess
文件的最顶部。至少它应该高于任何其他 RewriteRules
。那是因为这里使用了一个循环,直到没有更多的大写字符可以转换,它会一直从第一个HASCAPS:TRUE RewriteRule
.
开始
RewriteEngine On
RewriteBase /
# If there are caps, set HASCAPS to true and skip next rule
RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1]
# Skip this entire section if no uppercase letters in requested URL
RewriteRule ![A-Z] - [S=28]
# Replace single occurance of CAP with cap, then process next Rule.
RewriteRule ^([^A]*)A(.*)$ a
RewriteRule ^([^B]*)B(.*)$ b
RewriteRule ^([^C]*)C(.*)$ c
RewriteRule ^([^D]*)D(.*)$ d
RewriteRule ^([^E]*)E(.*)$ e
RewriteRule ^([^F]*)F(.*)$ f
RewriteRule ^([^G]*)G(.*)$ g
RewriteRule ^([^H]*)H(.*)$ h
RewriteRule ^([^I]*)I(.*)$ i
RewriteRule ^([^J]*)J(.*)$ j
RewriteRule ^([^K]*)K(.*)$ k
RewriteRule ^([^L]*)L(.*)$ l
RewriteRule ^([^M]*)M(.*)$ m
RewriteRule ^([^N]*)N(.*)$ n
RewriteRule ^([^O]*)O(.*)$ o
RewriteRule ^([^P]*)P(.*)$ p
RewriteRule ^([^Q]*)Q(.*)$ q
RewriteRule ^([^R]*)R(.*)$ r
RewriteRule ^([^S]*)S(.*)$ s
RewriteRule ^([^T]*)T(.*)$ t
RewriteRule ^([^U]*)U(.*)$ u
RewriteRule ^([^V]*)V(.*)$ v
RewriteRule ^([^W]*)W(.*)$ w
RewriteRule ^([^X]*)X(.*)$ x
RewriteRule ^([^Y]*)Y(.*)$ y
RewriteRule ^([^Z]*)Z(.*)$ z
# If there are any uppercase letters, restart at very first RewriteRule in file.
RewriteRule [A-Z] - [N]
RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) / [R=301,L]
更好的方法,但它必须在 httpd.conf
文件中,而不是 .htaccess
RewriteEngine on
RewriteBase /
RewriteMap lowercase int:tolower
RewriteCond [A-Z]
RewriteRule ^/?(.*)$ /${lowercase:} [R=301,L]
您确定httpd.conf
中的mod_speling
使用正确吗?
<IfModule mod_speling.c>
CheckCaseOnly On
CheckSpelling On
</IfModule>
我查看了其他答案,似乎无法正确回答这个问题,我也尝试过 mod_speling,但这似乎无法解决问题
我
所以如果 url 全部是小写它很好,如果不是,它将 301 到正确的 url 大写,然后 303 到最后的 url 全部小写案件。我正在尝试摆脱 303 并使其成为 301。
是否可以将此规则重定向到 url 的小写版本,或者可能需要一条新规则?
^(this-is-static/[a-zA-Z-]+)_([^/]+)$ // [R=301,L]
要完全在 .htaccess
中完成(不推荐),这应该放在 .htaccess
文件的最顶部。至少它应该高于任何其他 RewriteRules
。那是因为这里使用了一个循环,直到没有更多的大写字符可以转换,它会一直从第一个HASCAPS:TRUE RewriteRule
.
RewriteEngine On
RewriteBase /
# If there are caps, set HASCAPS to true and skip next rule
RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1]
# Skip this entire section if no uppercase letters in requested URL
RewriteRule ![A-Z] - [S=28]
# Replace single occurance of CAP with cap, then process next Rule.
RewriteRule ^([^A]*)A(.*)$ a
RewriteRule ^([^B]*)B(.*)$ b
RewriteRule ^([^C]*)C(.*)$ c
RewriteRule ^([^D]*)D(.*)$ d
RewriteRule ^([^E]*)E(.*)$ e
RewriteRule ^([^F]*)F(.*)$ f
RewriteRule ^([^G]*)G(.*)$ g
RewriteRule ^([^H]*)H(.*)$ h
RewriteRule ^([^I]*)I(.*)$ i
RewriteRule ^([^J]*)J(.*)$ j
RewriteRule ^([^K]*)K(.*)$ k
RewriteRule ^([^L]*)L(.*)$ l
RewriteRule ^([^M]*)M(.*)$ m
RewriteRule ^([^N]*)N(.*)$ n
RewriteRule ^([^O]*)O(.*)$ o
RewriteRule ^([^P]*)P(.*)$ p
RewriteRule ^([^Q]*)Q(.*)$ q
RewriteRule ^([^R]*)R(.*)$ r
RewriteRule ^([^S]*)S(.*)$ s
RewriteRule ^([^T]*)T(.*)$ t
RewriteRule ^([^U]*)U(.*)$ u
RewriteRule ^([^V]*)V(.*)$ v
RewriteRule ^([^W]*)W(.*)$ w
RewriteRule ^([^X]*)X(.*)$ x
RewriteRule ^([^Y]*)Y(.*)$ y
RewriteRule ^([^Z]*)Z(.*)$ z
# If there are any uppercase letters, restart at very first RewriteRule in file.
RewriteRule [A-Z] - [N]
RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) / [R=301,L]
更好的方法,但它必须在 httpd.conf
文件中,而不是 .htaccess
RewriteEngine on
RewriteBase /
RewriteMap lowercase int:tolower
RewriteCond [A-Z]
RewriteRule ^/?(.*)$ /${lowercase:} [R=301,L]
您确定httpd.conf
中的mod_speling
使用正确吗?
<IfModule mod_speling.c>
CheckCaseOnly On
CheckSpelling On
</IfModule>