2016-10-10 122 views
1

我访问file.php编写mydomain.com/file。我需要能够访问也写mydomain.com/FILE.htaccess不区分大小写的目录

在.htaccess我用下面的规则删除扩展:

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

RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ /$1.php [L] 

# redirect to .php-less link if requested directly 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP/.+ 
RewriteRule ^(.+)\.php $1 [R=301,L] 

如果该规则应予以更改─这是给你的。在规则

+0

它在专用网络。我需要尽量减少用户的错误。 –

+0

保持您的文件为小写,并使用'RewriteMap'将每个URL转换为小写。 (需要访问Apache服务器配置) – anubhava

+0

这些文件是小写的。我应该在config中进行哪些更改,以及如何使用RewriteMap?你能以答案的形式写下来,所以我可以标记它是否正确? –

回答

1

在Apache或vhost配置定义这个RewriteMap

RewriteMap lc int:tolower 

然后你的.htaccess里面有一个额外的规则为小写全大写的URI:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301,NE] 

# redirect to .php-less link if requested directly 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP [NC] 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,NC,NE] 

# convert each REQUEST_URI to lowercase 
RewriteRule ^(.*?[A-Z]+.*)$ /${lc:$1} [R=301,L,NE] 

# internally add .php 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 
+0

我应该在.htaccess中写入'RewriteMap lc int:tolower'吗?我明天会检查并写信。谢谢! –

+1

不,'RewriteMap lc int:tolower'必须放在'httpd.con'或你的vhost配置文件中。 .htaccess不允许'RewriteMap' – anubhava

-1

使用[NC]标志

使用[NC]标志的使重写规则中一 不区分大小写的方式进行匹配。也就是说,它不关心字母 是否在匹配的URI中显示为大写或小写。

https://httpd.apache.org/docs/current/rewrite/flags.html

+1

这不会自行工作,因为对于不同的请求,'$ 1'将被替换为不同的标记。 – arkascha

+0

是的,这不起作用。 –

-1

你需要采取的方面的护理:先不区分大小写的匹配和第二的情况下转换为小写。

Apache的重写模块提供了NC标志第一个方面和某种程度上更复杂的方法来第二个:

RewriteEngine On 

# remove trailing slash (/) if no such folder exists 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /${lc:$1} [NC,L,R=301] 

# internally rewrite to a php script if it exists and convert to lower case 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.+)$ /${lc:$1}.php [NC,L] 

# redirect to .php-less link if requested directly 
RewriteRule ^(.+)\.php$ ${lc:$1} [NC,L,R=301] 

我的印象中,虽然你的原设定的重写规则并没有真正达到什么你试图,即使它在语法上也是无效的。这就是为什么我改变了几个方面。

+0

这不起作用。你可能会建议另一种实现这种方式的方法 –

+0

@TarlanMammadzada你是否愿意详细说明_what_不会起作用_why_?或者你只是“假设”? – arkascha

+0

我查过了。即使在小写情况下给出内部错误 –