删除尾部斜杠,php扩展和大写的htaccess

时间:2014-02-24 17:56:22

标签: php .htaccess redirect

我正在尝试编写一个.htaccess文件来完成三件事:

  1. 将网址中的大写字母更改为小写字母(即domain.com/Redirect更改为domain.com/redirect
  2. 加载php页面而不需要扩展名(即domain.com/redirect.php更改为domain.com/redirect
  3. 删除尾部斜杠(即domain.com/redirect/更改为domain.com/redirect
  4. 基本上,我希望我们的网站能够将domain.com/Redirect.phpdomain.com/Redirect/都更改为domain.com/redirect

    到目前为止我使用的是大写字母和扩展名,但不适用于尾部斜杠。如果我转到domain.com/redirect/,则会将网址更改为domain.com/redirect/.php

    这就是我所拥有的:

    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(.*)$ $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]
    
    RewriteCond %{ENV:HASCAPS} TRUE
    RewriteRule ^/?(.*) /$1 [R=301,L]
    
    
    # Don't require .php extension to load php page
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)$ $1.php
    
    # Remove trailing slash
    
    RewriteRule ^(.*)/$ $1 [R=301,L]
    

1 个答案:

答案 0 :(得分:0)

ENV:HASCAPS规则之后保留这些规则:

# Remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule ^(.+?)/$ /$1 [R=301,L]

# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(?:index)?(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]

# Don't require .php extension to load php page
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /$1.php [L]