我正在尝试了解.htaccess文件中导致问题的规则。
规则是:
<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !.?folder1.? [NC]
RewriteRule .? "/home/user1/public_html/sitefolder/folder1/file.php" [L]
</IfModule>
我的理解是,如果用户访问不包含'folder1'的网址,这会打开/folder1/file.php吗?
答案 0 :(得分:1)
我的理解是,在用户访问不包含&#39; folder1&#39;?
的网址时,这会打开/folder1/file.php。
那是对的。
来自mod_rewrite documentation的一些说明:
变量SCRIPT_FILENAME和REQUEST_FILENAME包含相同的值 - Apache服务器的内部request_rec结构的filename字段的值。第一个名称是众所周知的CGI变量名称,而第二个名称是REQUEST_URI的适当对应物(其中包含request_rec的uri字段的值)。
如果发生替换并且重写继续,则两个变量的值将相应更新。
这意味着条件检查字符串folder
是否存在于此变量中的任何位置。
规则没有特别匹配,但目标是文件系统上文件的完全限定绝对路径。规则的目标可以是文件路径或URL路径,在这种情况下,它是文件路径。在确定哪个是哪个时,Mod_rewrite始终是最亮的,因此它可能与这个URL路径相混淆,但可能不是。
一旦请求被重写为/folder1/file.php
,然后重写引擎循环,规则再次应用,但这次,%{SCRIPT_FILENAME}
变量包含&#34; folder1&#34;而且规则没有适用。
答案 1 :(得分:0)
如果您想在URI不包含 folder1 (确切情况)时触发RewriteRule,您可以
RewriteEngine On
RewriteCond %{REQUEST_URI} !folder1
RewriteRule ^(.*)$ /folder1/file.php
请注意,它不像您拥有的完整文件路径。现在,如果您要尝试做的是重写任何无法启动 {/ 1}} 到 /folder1/...
(IOW,坚持{{1}在缺少它的任何URI前面,因为你将你的应用程序移动到一个级别),它将是
/folder1/...
它还会从原始URL传输任何查询字符串。