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/9/loops/2.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
.htaccess 重写规则在没有尾部斜杠的情况下不起作用_.htaccess_Loops_Rewrite - Fatal编程技术网

.htaccess 重写规则在没有尾部斜杠的情况下不起作用

.htaccess 重写规则在没有尾部斜杠的情况下不起作用,.htaccess,loops,rewrite,.htaccess,Loops,Rewrite,我有一个有效的重写规则从URL中隐藏index.php?dir=。例如,如果我尝试 www.example.com/folder/dir1/ 它将其改写为 www.example.com/folder/index.php?dir=dir1/ 那太好了问题是如果我从URL中删除了尾随斜杠,即 www.example.com/folder/dir1 它进入重定向循环我的完整访问权限是: Options +FollowSymLinks RewriteEngine On RewriteBase



我有一个有效的重写规则从URL中隐藏index.php?dir=。
例如,如果我尝试

www.example.com/folder/dir1/
它将其改写为

www.example.com/folder/index.php?dir=dir1/
那太好了

问题是如果我从URL中删除了尾随斜杠,即

www.example.com/folder/dir1
它进入重定向循环

我的完整访问权限是:

Options +FollowSymLinks 

RewriteEngine On
RewriteBase /folder

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]

RewriteCond %{QUERY_STRING}  ^dir=(.*)$ [NC]
RewriteRule ^ %1? [L,R=301,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^(.+)/? index.php?dir=$1 [L,QSA]
请给出建议?

(i)我对
重写库/论文感到困惑。这只有在
DOCROOT/papers/.htaccess
中才有意义。如果该位置为“文件夹”==纸张?如果不是这样的话,我对重写引擎变得混乱并不感到惊讶。(ii)在子查询查找中,`%{REDIRECT_STATUS}不是200,以在多视图或目录索引匹配时计算默认值

所以,在你做任何其他事情之前:

  • 验证您的基础是否正确,如果不正确,请修复它
  • 如果不使用选项-多视图,请使用它们
  • 检查您的系统、vhost配置和
    DOCROOT/.htaccess
    以查看是否指定了
    DirectoryIndex
    。(与仅从最低的
    .htaccess
    中获取的重写规则不同,所有规则都会扫描以查找类似的指令。)
  • RewriteCond%{ENV:REDIRECT_STATUS}200替换为

     RewriteCond %{ENV:REDIRECT_END}%{IS_SUBREQ} true
    
    并将标志
    E=END:true
    添加到任何要强制作为匹配结束循环的规则中(类似于Apache 2.4[END]标志),额外的%{IS_SUBREQ}防止对子查询触发规则。除非你真的知道自己在做什么,否则你不会希望这种事情发生

    • (i)我对
      重写库/论文感到困惑。这只有在
      DOCROOT/papers/.htaccess
      中才有意义。如果该位置为“文件夹”==纸张?如果不是这样的话,我对重写引擎变得混乱并不感到惊讶。(ii)在子查询查找中,`%{REDIRECT_STATUS}不是200,以在多视图或目录索引匹配时计算默认值

      所以,在你做任何其他事情之前:

      • 验证您的基础是否正确,如果不正确,请修复它
      • 如果不使用选项-多视图,请使用它们
      • 检查您的系统、vhost配置和
        DOCROOT/.htaccess
        以查看是否指定了
        DirectoryIndex
        。(与仅从最低的
        .htaccess
        中获取的重写规则不同,所有规则都会扫描以查找类似的指令。)
      • RewriteCond%{ENV:REDIRECT_STATUS}200替换为

         RewriteCond %{ENV:REDIRECT_END}%{IS_SUBREQ} true
        
        并将标志
        E=END:true
        添加到任何要强制作为匹配结束循环的规则中(类似于Apache 2.4[END]标志),额外的%{IS_SUBREQ}防止对子查询触发规则。除非你真的知道自己在做什么,否则你不会希望这种事情发生

        • 找到了答案

          必须更换

          RewriteRule ^(.+)/? index.php?dir=$1 [L,QSA]
          

          感谢大家的贡献。

          找到了答案

          必须更换

          RewriteRule ^(.+)/? index.php?dir=$1 [L,QSA]
          


          感谢大家的贡献。

          不确定,但请尝试更改
          RewriteRule^(+)/?index.php?dir=$1[L,QSA]
          to
          RewriteRule^(+)?index.php?dir=$1[L,QSA]
          你是说
          RewriteCond%{REQUEST\u FILENAME}-d
          在上一条规则中?@Ofir:不,这没用!情况保持原样。@anubhava:不,没有它!故意..您可以尝试添加
          directorysash Off
          不确定,但尝试更改
          RewriteRule^(+)/?index.php?dir=$1[L,QSA]
          to
          RewriteRule^(+)?index.php?dir=$1[L,QSA]
          你是说
          RewriteCond%{REQUEST\u FILENAME}-d
          在上一条规则中?@Ofir:不,这没用!情况保持原样。@anubhava:不,没有它!故意..您可以尝试添加
          directorysash Off
          regexp没有任何意义,因为
          ^(.*)
          意味着
          ^(+)/?
          和v.v。我也不确定您为什么要在dir参数上添加尾随/项。这也不能解释循环。我猜,'$1/'主要是让它工作的!我的PHP需要在目录末尾使用/才能工作。如果不存在,则名为index.php的目录会再次启动重定向。。它现在工作起来很有魅力。regexp没有任何意义,因为
          ^(.*)
          意味着
          ^(+)/?
          和v.v。我也不确定为什么要在dir参数上使用尾随/。这也不能解释循环。我猜,'$1/'主要是它工作的原因!我的PHP需要在目录末尾使用/才能工作。如果不存在,则名为index.php的目录会再次启动重定向。。它现在起作用了。。