htaccess - Rewriterule重定向到错误的URL

时间:2015-08-20 23:57:45

标签: regex apache .htaccess mod-rewrite

我有一个简单的重写:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?p=$1 [QSA]

任何不是现有文件的内容都应转发到index.php。但是,有一个目录images,其中有七个图像,但没有index.php|html。当我打开localhost/images时没有关闭斜杠(localhost/images/正常工作),它会将我重定向到localhost/images/?p=images。我该如何解决?

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为mod_dir模块在​​mod_rewrite向目录添加尾部斜杠之后运行。您应该添加条件以避免重写规则中的目录。还使用重定向规则添加尾部斜杠:

RewriteEngine on

# add a trailing slash to directories
RewriteCond %{DOCUMENT_ROOT}/$1 -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=302]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]