2015-11-01 76 views
0

我想写根据修改后的代码从here一个.htaccess重写,将转换的网址是这样的:的.htaccess小写重写导致HTTP错误

http://eXAMplE.CoM/sOMe-PatH/aNOTHer-PAth/FILEName.eXT 

要这样:

http://example.com/some-path/another-path/FILEName.eXT 

基本上将整个URL转换为小写并排除文件名。

[问题] 我的.htaccess似乎是工作确定有一个例外:如果一切都超出了最初的路径包括一个大写字母,它导致从服务器的数据。我认为这是造成无限循环,但不能确定,因为我无法访问日志。

要澄清,这个工作:

http://eXAMplE.CoM/sOMe-PatH/FILEName.eXT 

这不:

http://eXAMplE.CoM/sOMe-PatH/aNOTHer-PAth/FILEName.eXT 

这里是我的代码。谁能帮忙?

RewriteEngine On 
RewriteBase/

# 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(.*\/.*)$ $1a$2 
    RewriteRule ^([^B]*)B(.*\/.*)$ $1b$2 
    RewriteRule ^([^C]*)C(.*\/.*)$ $1c$2 
    RewriteRule ^([^D]*)D(.*\/.*)$ $1d$2 
    RewriteRule ^([^E]*)E(.*\/.*)$ $1e$2 
    RewriteRule ^([^F]*)F(.*\/.*)$ $1f$2 
    RewriteRule ^([^G]*)G(.*\/.*)$ $1g$2 
    RewriteRule ^([^H]*)H(.*\/.*)$ $1h$2 
    RewriteRule ^([^I]*)I(.*\/.*)$ $1i$2 
    RewriteRule ^([^J]*)J(.*\/.*)$ $1j$2 
    RewriteRule ^([^K]*)K(.*\/.*)$ $1k$2 
    RewriteRule ^([^L]*)L(.*\/.*)$ $1l$2 
    RewriteRule ^([^M]*)M(.*\/.*)$ $1m$2 
    RewriteRule ^([^N]*)N(.*\/.*)$ $1n$2 
    RewriteRule ^([^O]*)O(.*\/.*)$ $1o$2 
    RewriteRule ^([^P]*)P(.*\/.*)$ $1p$2 
    RewriteRule ^([^Q]*)Q(.*\/.*)$ $1q$2 
    RewriteRule ^([^R]*)R(.*\/.*)$ $1r$2 
    RewriteRule ^([^S]*)S(.*\/.*)$ $1s$2 
    RewriteRule ^([^T]*)T(.*\/.*)$ $1t$2 
    RewriteRule ^([^U]*)U(.*\/.*)$ $1u$2 
    RewriteRule ^([^V]*)V(.*\/.*)$ $1v$2 
    RewriteRule ^([^W]*)W(.*\/.*)$ $1w$2 
    RewriteRule ^([^X]*)X(.*\/.*)$ $1x$2 
    RewriteRule ^([^Y]*)Y(.*\/.*)$ $1y$2 
    RewriteRule ^([^Z]*)Z(.*\/.*)$ $1z$2 

    # If there are any uppercase letters, restart at very first RewriteRule in file. 
    RewriteRule .*?[A-Z].*\/.* - [N] 

    # Force a redirect with the new lowercase URL. 
    RewriteRule (.*) $1 [R=301,L] 

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

RewriteBase/
RewriteRule ^index\.php$ - [L] 

# uploaded files 
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L] 

# add a trailing slash to /wp-admin 
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] 
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] 
RewriteRule . index.php [L] 
</IfModule> 

回答

0

您最好用RewriteMap代替。在服务器配置(或虚拟主机配置)增加以下内容:

RewriteMap to_lower int:tolower 

现在,你可以使用函数to_lower在你的重写规则。请尝试以下方法:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^((?=[A-Z]).+)(/[^/]+)$ /${to_lower:$1}$2 [R=301,L]