htaccess添加了不需要的字符

时间:2012-05-26 23:34:14

标签: apache .htaccess trailing-slash

我有一个看起来像这样的htaccess文件

Options +FollowSymLinks
Options -Indexes
RewriteEngine on
RewriteBase /website/

# add slashes after link/folder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://localhost/website/$1/ [L,R=301]

# shorten URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&beta=$2&gamma=$3&delta=$4 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&beta=$2&gamma=$3 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&beta=$2 [L]
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [L]

一切正常,直到它必须向根目录中具有匹配文件夹的链接添加斜杠。

示例:如果我写下 www.example.com/live 并且www.example.com/中没有名为“live”的文件夹,则脚本将添加斜杠。但是,由于有一个名为“live”的文件夹,脚本会再次添加斜杠,但它也会添加此页面?page = live,因此URL将如下所示 www.example.com/live /?页=活

我的问题是为什么?page = something& beta = something& gamma = ...等。被添加到后面,我该如何让它停止?

1 个答案:

答案 0 :(得分:1)

DirectorySlash Off

应该解决这个问题。

编辑以执行DirectorySlash通常使用的操作:

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