【问题标题】:htaccess - do not rewrite in this casehtaccess - 在这种情况下不要重写
【发布时间】:2011-09-27 16:30:35
【问题描述】:

我的访问文件如下所示:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

但我有一个名为 facebook 的目录,我想像往常一样通过 URL http://mysite.com/facebook 访问它。我需要在上面添加什么以便它忽略(不重写)这个目录?

【问题讨论】:

  • 你能解释一下为什么需要 RewriteRule ^.*$ - [NC,L] AND RewriteRule ^.*$ index.php [NC,L] 吗? RewriteCond %{REQUEST_FILENAME} -d 应该允许正常的目录遍历,因为这会关闭对现有目录的重写。
  • 我自己也不懂——它是 Zend Framework 的标准 htaccess 文件。
  • 你有使用“facebook”作为 url 的路由吗?想想可能导致问题的原因。它也可能是目录的权限。
  • Zend 路由期望域之后的第一项是控制器的名称,因此mysite.com/facebook 将路由到名为 facebookController 的控制器。这实际上是正在发生的事情,并且报告的错误是“缺少控制器 facebook”。所以 htacess 正在做它的工作......我只是不希望它与这个目录一起工作。
  • 这实际上意味着 .htaccess 没有 完成它的工作,因为 RewriteCond %{REQUEST_FILENAME} -d 应该允许您查看目录。我会做一些测试并提交答案。

标签: .htaccess


【解决方案1】:

添加:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_URI}  !^/facebook
RewriteRule ^.*$ index.php [NC,L]

【讨论】:

  • 即使在将 Rewrute 更改为 Rewrite 之后也会出现 500 错误。
  • @Owen 试试!后面不加空格
  • @LazyOne - 现在没有 500 错误,但没有区别。请求仍然通过 index.php/facebook。
  • @Owen 尝试用%{DOCUMENT_ROOT}%{REQUEST_URI} 替换%{REQUEST_FILENAME}——我在这里回答了几个问题,这有帮助(不确定为什么——必须是一些特定的设置)。否则——在你的最后一行之前添加RewriteCond %{REQUEST_URI} !^/facebook(在RewriteRule ^.*$ index.php [NC,L]之前)——不像Death那样(向下移动第一行)。
  • 谢谢大家,只需将条件移到倒数第二行即可:-)
猜你喜欢
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 2014-03-20
  • 2015-09-12
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 2021-11-30
相关资源
最近更新 更多