.htaccess在应用规则时不忽略目录

时间:2012-05-15 02:02:55

标签: .htaccess mod-rewrite

在我寻求帮助之前暂时坚持这一个,任何帮助都表示赞赏。

出于所有密集目的,我不得不使用此方法将所有小写的URL重定向到我当前的设置,我知道这不是很好。

问题是当我使用此设置时,目录中的所有Urls都应跳过它。例如/ dont-touch / File1停止工作 - 我需要插入以下代码,以便小写重写不适用于/不要触摸

RewriteCond %{REQUEST_URI} "/dont-touch/" [OR]
RewriteCond %{REQUEST_URI} "/blog/"
RewriteRule ![A-Z] - [S=26]
RewriteRule ^(.*)A(.*)$ /$1a$2 [R,L]
RewriteRule ^(.*)B(.*)$ /$1b$2 [R,L]
RewriteRule ^(.*)C(.*)$ /$1c$2 [R,L]
RewriteRule ^(.*)D(.*)$ /$1d$2 [R,L]
RewriteRule ^(.*)E(.*)$ /$1e$2 [R,L]
RewriteRule ^(.*)F(.*)$ /$1f$2 [R,L]
RewriteRule ^(.*)G(.*)$ /$1g$2 [R,L]
RewriteRule ^(.*)H(.*)$ /$1h$2 [R,L]
RewriteRule ^(.*)I(.*)$ /$1i$2 [R,L]
RewriteRule ^(.*)J(.*)$ /$1j$2 [R,L]
RewriteRule ^(.*)K(.*)$ /$1k$2 [R,L]
RewriteRule ^(.*)L(.*)$ /$1l$2 [R,L]
RewriteRule ^(.*)M(.*)$ /$1m$2 [R,L]
RewriteRule ^(.*)N(.*)$ /$1n$2 [R,L]
RewriteRule ^(.*)O(.*)$ /$1o$2 [R,L]
RewriteRule ^(.*)P(.*)$ /$1p$2 [R,L]
RewriteRule ^(.*)Q(.*)$ /$1q$2 [R,L]
RewriteRule ^(.*)R(.*)$ /$1r$2 [R,L]
RewriteRule ^(.*)S(.*)$ /$1s$2 [R,L]
RewriteRule ^(.*)T(.*)$ /$1t$2 [R,L]
RewriteRule ^(.*)U(.*)$ /$1u$2 [R,L]
RewriteRule ^(.*)V(.*)$ /$1v$2 [R,L]
RewriteRule ^(.*)W(.*)$ /$1w$2 [R,L]
RewriteRule ^(.*)X(.*)$ /$1x$2 [R,L]
RewriteRule ^(.*)Y(.*)$ /$1y$2 [R,L]
RewriteRule ^(.*)Z(.*)$ /$1z$2 [R,L]

这就是我的HTACCESS文件的样子,我试过把它放在开头......结束。什么都行不通。

 RewriteEngine On



 RewriteCond %{HTTP_HOST} !^www\.
 RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]


 RewriteCond %{REQUEST_URI} !/component/
 RewriteCond %{REQUEST_URI} !/administrator/
 RewriteCond %{HTTP_HOST} ^(www.)?example\.com$ [NC]
 RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

1 个答案:

答案 0 :(得分:0)

首先,你最好在这里使用RewriteMap:

RewriteEngine On
RewriteMap  lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]

这会将URI中的所有内容更改为小写,而不是26条慢速规则。

其次,对于不能重写的目录,我认为你不应该把它们放在引号

RewriteCond %{REQUEST_URI} ^/dont-touch(/|$) [OR]
RewriteCond %{REQUEST_URI} ^/blog(/|$)
RewriteRule ^.*$ - [NC,L]

如果您将[L]标记放在最后,那么该点以下的任何内容都不会影响此规则。