1

我正在尝试从 Apache 1.3.42 中的子目录文件夹中删除尾部斜杠,但是当我尝试将规则添加到我的 .htaccess 文件时,我的 Apache 版本不支持命令 DirectorySlash Off。

目前我的链接行为如下:

www.domain.com/folder 指向 www.domain.com/folder/

我想要的是:

www.domain.com/folder/ 指向 www.domain.com/folder

我当前的 .htaccess 文件如下所示:

AddType application/x-httpd-php .html

RewriteEngine On
RewriteBase /

#non www to www

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

#removing trailing slash

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

#html

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.html [NC,L]

#index redirect

#directory remove index.html

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/ 
RewriteRule ^index\.html$ http://www.arkiq.com/ [R=301,L]

#directory remove index 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\ HTTP/ 
RewriteRule ^index http://www.arkiq.com/ [R=301,L]

#sub-directory remove index.html

RewriteCond %{THE_REQUEST} /index\.html
RewriteRule ^(.*)/index\.html$ /$1 [R=301,L]

#sub-directory remove index

RewriteCond %{THE_REQUEST} /index
RewriteRule ^(.*)/index /$1 [R=301,L]

#remove .html

RewriteCond %{THE_REQUEST} \.html
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

我确实意识到这很可能是一个很难解决的问题,但是我很感激你看到它。

4

1 回答 1

3

除了删除尾部斜杠之外,您还需要添加一些其他规则。使用DirectorySlash Off,从无斜杠到尾部斜杠的重定向停止,但是如果您访问任何目录,它将打印目录的内容而不是显示索引文件。

这意味着您必须在内部向目录添加尾部斜杠。所以改变这些行:

#removing trailing slash

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

至:

DirectorySlash Off

#removing trailing slash    
RewriteCond %{THE_REQUEST_FILENAME} \ /(.*)/(\ |$|\?)
RewriteRule ^(.*)/$ $1 [R=301,L]

# internally add the slash back
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)$ /$1/ [L]
于 2013-11-15T00:34:33.560 回答