我在服务器上运行可通过网络访问的语言数据库。我服务器的文档根目录中的文件lexirumah
包含一个为该应用程序提供服务的WSGI python脚本。
我希望该应用程序在http://www\.example\.eu/lexirumah?/?
的所有匹配项中均可使用,无论大小写如何。当前,我正在使用以下.htaccess
文件。
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.example.eu$ [NC]
RewriteRule ^(.*)$ http://www.example.eu/$1 [L,R=301,NC]
RewriteRule ^lexirumah?$ http://www.example.eu/lexirumah/ [L,R=301,NC]
RewriteRule ^lexiruma/$ http://www.example.eu/lexirumah/ [L,R=301,NC]
RewriteRule ^LexiRumah/$ http://www.example.eu/lexirumah/ [L,R=301]
Options +ExecCGI
<Files "lexirumah">
SetHandler fcgid-script
</Files>
当我将最后一个RewriteRule
更改为
RewriteRule ^LexiRumah/$ http://www.example.eu/lexirumah/ [L,R=301,NC]
我得到的重定向次数是无限的。我想保留非规范网址的301状态,所以我尝试了
RewriteRule ^lexirumah/$ http://www.example.eu/lexirumah/ [L]
RewriteRule ^lexirumah?$ http://www.example.eu/lexirumah/ [L,R=301,NC]
RewriteRule ^lexiruma/$ http://www.example.eu/lexirumah/ [L,R=301,NC]
RewriteRule ^LexiRumah/$ http://www.example.eu/lexirumah/ [L,R=301,NC]
导致内部服务器错误。 (大概是以前由我的浏览器捕获的无限重定向循环现在发生在mod_rewrite
内部?)
现在,我已经更改了规则,以使用RewriteCond
来跳过大小写已标准化的情况。
RewriteCond %{REQUEST_URI} !^/lexirumah/$
RewriteRule ^LexiRumah/$ http://www.example.eu/lexirumah/ [L,R=301,NC]
RewriteRule ^lexirumah?$ http://www.example.eu/lexirumah/ [L,R=301,NC]
RewriteRule ^lexiruma/$ http://www.example.eu/lexirumah/ [L,R=301,NC]
这套规则是我想要的吗,还是我需要考虑任何隐藏的陷阱?
答案 0 :(得分:0)
是的,您的规则集符合您的期望。
但是请注意,您可以在前^lexirulah/$
中使用RewriteRule
,因为其中包含了NC
标志。结果,匹配将不区分大小写(No Case
)。可以here找到NC
标志的官方文档。
此外,您不需要完整的URL(包括主机)进行重定向。您可以为每个规则直接使用RewriteRule ^xxxx$ /lexirumah/ [L,R=301,NC]
。
当我将最后一个RewriteRule更改为
RewriteRule ^LexiRumah/$ http://www.example.eu/lexirumah/ [L,R=301,NC]
我得到的重定向次数是无限的。
考虑一下,很容易理解为什么会陷入无限循环。由于NC
在不区分大小写的模式下匹配,因此您的重定向将始终一次与您的规则匹配。