【问题标题】:Rewrite rule not working without trailing slash没有斜杠,重写规则不起作用
【发布时间】:2012-02-28 13:14:35
【问题描述】:



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

www.example.com/folder/dir1/

将其重写为

www.example.com/folder/index.php?dir=dir1/

那很好!

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

www.example.com/folder/dir1

它进入重定向循环!

我的完成 htaccess 是:

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]

请指教?

【问题讨论】:

  • 不确定,但请尝试将 RewriteRule ^(.+)/? index.php?dir=$1 [L,QSA] 更改为 RewriteRule ^(.+)? index.php?dir=$1 [L,QSA]
  • 你是说最后一条规则中的RewriteCond %{REQUEST_FILENAME} !-d 吗?
  • @Ofir:不,它没有帮助!情况保持不变..
  • @anubhava:没有!故意的..
  • 您可以尝试添加DirectorySlash Off

标签: .htaccess loops rewrite


【解决方案1】:

(i) 我对RewriteBase /papers 感到困惑。这仅在DOCROOT/papers/.htaccess 中有意义。如果这个位置是“文件夹”==文件?如果不是这样,我对重写引擎变得混乱并不感到惊讶。 (ii) 如果 MultiViews 或 DirectoryIndex 匹配,`%{REDIRECT_STATUS} 在子查询查找中不是 200 以评估默认值。

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

  • 验证您的基础是否正确,如果不正确,请修复它。
  • 如果不使用,请使用 Options -MultiViews
  • 检查您的系统、虚拟主机配置和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} 防止规则在子查询。你不希望这种情况发生,除非你真的知道你在做什么。

【讨论】:

    【解决方案2】:

    想通了!

    不得不更换

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

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

    感谢大家的贡献..

    【讨论】:

    • 正则表达式没有意义,因为 ^(.*)? 暗示 ^(.+)/? 和 v.v.我也不确定你为什么要在 dir 参数后面加上 /。
    • 这也不能解释循环。
    • 我的猜测是 '$1/' 主要使它起作用!我的 PHP 在目录末尾需要 / 才能工作。如果它不存在,则名为 index.php 的目录会再次启动重定向。它现在就像一个魅力一样工作。
    猜你喜欢
    • 2011-11-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多