Apache - 重写规则更改URL

时间:2014-03-15 19:22:59

标签: apache .htaccess mod-rewrite

在我的.htaccess文件中,我有

RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(swf|gif|jpe?g|png|css|txt|js|json|xml|ico)$
RewriteRule ^(.*)/?$ index.php?page=$1 [QSA,L]

如果我有一个名为myfiles的目录,并且在浏览器地址栏中我转到http://localhost/mysite/myfiles/一切都很好,但是如果我转到http://localhost/mysite/myfiles(没有斜杠),地址栏中的网址更改为http://localhost/mysite/myfiles/?page=myfiles

如何更改.htaccess以便它不会更改URL并公开变量?为什么它首先会这样做?

1 个答案:

答案 0 :(得分:1)

这是因为mod_dir将不以斜杠结尾的目录的请求重定向到那些执行的目录,并且有一个very good reason why it must do this

您需要做的是关闭mod_dir和/或自己重定向这些斜线:

DirectorySlash off

RewriteEngine On

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

RewriteCond %{REQUEST_URI} !\.(swf|gif|jpe?g|png|css|txt|js|json|xml|ico)$
RewriteRule ^(.*)/?$ index.php?page=$1 [QSA,L]