Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么my.htaccess会将查询字符串附加到URL?_.htaccess_Mod Rewrite - Fatal编程技术网

为什么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-转到包含多个子页面的管理面板
但我遇到的问题是,当我转到mysite/site/admin时,如果没有后面的斜杠,它会在URL后面附加
/?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,以使它工作。