为什么我的.htaccess会将查询字符串附加到URL?

时间:2016-02-15 20:19:05

标签: .htaccess mod-rewrite

基本上我的网站设置方式如下:

  • mysite / site -Goes到主index.php文件
  • mysite / site / asdf -Goes到带有子页面的主index.php文件
  • mysite / site / admin -Goes到具有各种子页面的管理面板

但是我遇到的问题是当我在没有尾部斜杠的情况下访问mysite / site / admin时,它会将~^(<!--.*\R)(\s+<Connector[^>]+>)(.*\R-->.*)~ 附加到URL。如果我转到没有尾部斜杠的mysite / site / admin / pages,它会将/?admin=1附加到URL。我希望它不附加这些查询字符串。

如果我添加尾部斜杠,则不会追加查询字符串。如果我在没有尾部斜杠的情况下转到mysite / site / admin / pages / edit,它不会附加查询字符串,所以看起来只是前两个级别执行此操作。

这令人困惑,我根本不理解。我通过谷歌搜索和搜索这个网站尝试了很多各种各样的东西,但没有任何工作。我是这个.htaccess的新手。这是我的.htaccess文件的样子:

/?admin=1&page=pages

有人可以告诉我我做错了什么或如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是因为/site/admin/pages是一个有效的目录而没有尾随斜杠Apache的mod_dir模块将URL重定向到带有斜杠的一个。

要解决此问题,您可以使用:

RewriteEngine On

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

RewriteRule ^/?admin/users/([-\w]+)/?$ admin/index.php?admin=1&page=users&subpage=view&user=$1 [L]
RewriteRule ^/?admin/users/create/?$ admin/index.php?admin=1&page=users&subpage=create [L]

RewriteRule ^/?admin/([-\w]+)/([-\w]+)/([-\w]+)/?$ admin/index.php?admin=1&page=$1&subpage=$2&id=$3 [L]
RewriteRule ^/?admin/([-\w]+)/([-\w]+)/?$ admin/index.php?admin=1&page=$1&subpage=$2 [L]
RewriteRule ^/?admin/([-\w]+)/?$ admin/index.php?admin=1&page=$1 [L]
RewriteRule ^/?admin/?$ admin/index.php?admin=1 [L]

RewriteRule ^/?([-\w]+)/?$ index.php?page=$1 [L]