为什么my.htaccess会将查询字符串附加到URL?
基本上,我的网站设置方式如下:为什么my.htaccess会将查询字符串附加到URL?,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,基本上,我的网站设置方式如下: mysite/site-转到主index.php文件 mysite/site/asdf-转到带有子页面的主index.php文件 mysite/site/admin-转到包含多个子页面的管理面板 但我遇到的问题是,当我转到mysite/site/admin时,如果没有后面的斜杠,它会在URL后面附加/?admin=1。同样,如果我转到mysite/site/admin/pages而不带尾随斜杠,它会将/?admin=1&page=pages附加到URL。我希望
- mysite/site-转到主index.php文件
- mysite/site/asdf-转到带有子页面的主index.php文件
- mysite/site/admin-转到包含多个子页面的管理面板
/?admin=1
。同样,如果我转到mysite/site/admin/pages而不带尾随斜杠,它会将/?admin=1&page=pages
附加到URL。我希望它不要附加这些查询字符串
如果添加尾部斜杠,则不会追加查询字符串。如果我转到mysite/site/admin/pages/edit而不带尾随斜杠,它不会附加查询字符串,因此似乎只有前两个级别可以这样做
这令人困惑,我一点也不明白。我在谷歌搜索这个网站时尝试了很多不同的方法,但都没有效果。我对这是个新手。htaccess的东西。下面是我的.htaccess文件的外观:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/?admin/users/([\-_A-Za-z0-9]+)/?$ 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/([\-_A-Za-z0-9]+)/([\-_A-Za-z0-9]+)/([\-_A-Za-z0-9]+)/?$ admin/index.php?admin=1&page=$1&subpage=$2&id=$3 [L]
RewriteRule ^/?admin/([\-_A-Za-z0-9]+)/([\-_A-Za-z0-9]+)/?$ admin/index.php?admin=1&page=$1&subpage=$2 [L]
RewriteRule ^/?admin/([\-_A-Za-z0-9]+)/?$ admin/index.php?admin=1&page=$1 [L]
RewriteRule ^/?admin/?$ admin/index.php?admin=1 [L]
RewriteRule ^/?([\-_A-Za-z0-9]+)/?$ index.php?page=$1 [L]
</IfModule>
Options -Indexes
重新启动发动机
重写规则^/?admin/users/([\-\u A-Za-z0-9]+)/?$admin/index.php?admin=1&page=users&subpage=view&user=1[L]
重写规则^/?admin/users/create/?$admin/index.php?admin=1&page=users&subpage=create[L]
重写规则^/?admin/([\-\u A-Za-z0-9]+)/([\-\u A-Za-z0-9]+)/([\-\u A-Za-z0-9]+)/?$admin/index.php?admin=1&页面=$1&子页面=$2&id=$3[L]
重写规则^/?admin/([\-\u A-Za-z0-9]+)/([\-\u A-Za-z0-9]+)/?$admin/index.php?admin=1&页面=1&子页面=2[L]
重写规则^/?admin/([\-\u A-Za-z0-9]+)/?$admin/index.php?admin=1和page=1[L]
重写规则^/?admin/?$admin/index.php?admin=1[L]
重写规则^/?([\-\U A-Za-z0-9]+)/?$index.php?页面=$1[L]
选项-索引
谁能告诉我我做错了什么或者如何修复这个问题吗?这是因为
/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]
/site/admin/pages
是有效目录吗?@anubhava是的,它是有效目录,但包含所有页面。它使用admin/index.php来确定页面并将其包含在内。哦,我现在注意到了一件事,如果我转到mysite/admin/menus而没有尾随斜杠,它不会附加查询字符串,因此它必须与admin
和admin/pages
是有效的目录这一事实有关。谢谢,这似乎有效。我现在唯一担心的是,当我访问mysite/site时,没有尾部斜杠,我会得到一个403错误。有什么办法可以解决这个问题吗?我希望它使用index.php而不带查询字符串。我删除了选项-index,它似乎向我显示了/的index,而不是index.php文件。不,这是唯一的.htaccess,它位于站点的根目录中。它现在可以工作了,我删除了directorysash,以使它工作。