我访问了“ super 文件夹”的 .htaccess 文件并意外添加了
Rewrite / http://google.com/
这是使用 php 完成的。现在我无法访问任何目录中的 php 文件来恢复更改。
我可以在 root 的子目录中执行任何操作来停止该文件夹内的重定向吗?
谢谢。
请不要询问有关“事故”的更多细节..愚蠢的错误
最佳答案
I contacted server admin, both laughed at it.. Still interesting though how to stop it redirecting although it shouldn't happen if I use mod_rewrite.
使用 mod_alias' Redirect
, 你完蛋了。该指令全面应用,从 htaccess 文件所在的路径节点(如果它位于 htaccess 文件中)开始,或者从 <Directory>
的路径节点开始。它所在的 block 。因此唯一的解决方案是让管理员将其删除。
但是,对于 mod_rewrite,对于 htaccess 文件,它的行为与 <Directory>
中的行为不同。堵塞。目录内路径节点中的 htaccess 文件内的规则优先于父目录中的 htaccess 文件内的规则。因此,如果您有 2 个 htaccess 文件:
/.htaccess:
RewriteEngine On
RewriteRule ^/? http://google.com/
在/tmp/.htaccess中:
RewriteEngine On
RewriteRule ^/?tmp/ http://stackoverflow.com/
然后您转到 http://yourdomain.com/tmp/
,您将被重定向到 http://stackoverflow.com/
因为tmp目录中的规则优先于父目录中的规则。从表面上看,除非您使用 RewriteOptions Inherit
directive ,否则根本不会应用父目录中的规则。从父目录继承任何规则。
因此,您只需使用以下内容创建一个 htaccess 文件:
RewriteEngine On
使用FTP将其上传到您的子目录,并上传您用于更改父目录的htaccess文件的php文件。然后只需使用浏览器并转到子目录中的该 php 文件即可。
在子目录中简单地打开重写引擎,没有任何规则,意味着:
- 我在此目录中激活了 mod_rewrite
- 由于重写引擎在此目录中打开,因此忽略所有父目录中的所有规则。
- 由于 mod_rewrite 规则集为空(没有实际的
RerwiteRule
),所以什么也没有发生 - 访问此目录时,即使重写引擎已打开,mod_rewrite 也不执行任何操作,因此就好像重写引擎已关闭一样。
听起来违反直觉,但这就是它的工作原理。
关于php - 停止 htaccess 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12620926/