我现在有以下.htaccess。这是一个来自这里和那里的虚拟复制粘贴,但我想更多地了解这里发生的事情。
所以,我想请求你的帮助,以正确评论那些.htaccess说明:
#1) The rewrite is probably on. Still, to make sure:
RewriteEngine On
#2) If we need to overwrite some server definitions:
#php_value upload_max_filesize 15M
#php_value post_max_size 15M
#php_value max_execution_time 200
#php_value max_input_time 200
#3) If we want to exclude some files from URI rewriting we do:
RewriteCond %{REQUEST_FILENAME} !^(filename1|filename2)
#4) If we want to exclude those directories from URI rewriting we do:
RewriteRule ^(dir1|dir2|dir3) - [L]
#5) What are we saying here ?
RewriteRule ^\.htaccess$ - [F]
#6) What does those lines mean ? How are those 3 Condition/Rule blocks related ?
RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]
RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
#7) Should we have this, because it's somehow more controlled, OR should we use: !-f: ?
RewriteCond %{REQUEST_FILENAME} !\.(js|JS|Js|jS|ico|Ico|ICO|zip|ZIP|Zip|rar|RAR|Rar|mov|MOV|Mov|MPEG4|Mpeg4|mpeg4|mp4|Mp4|gif|GIF|Gif|jpg|JPG|Jpg|jpeg|JPEG|Jpeg|PNG|Png|png|CSS|Css|css|DOC|Doc|doc|PDF|Pdf|pdf|DOCX|Docx|DocX|docX|docx|WMV|Wmv|wmv|MPEG|Mpeg|mpeg|AVI|Avi|avi|MPG|Mpg|mpg|FLV|Flv|flv|PPT|Ppt|ppt|PPTX|PptX|Pptx|pptx|txt|TXT|txt)$
#8) Are we redirecting all requests inside public folder, to index.php ?
RewriteRule ^public/.*$ /public/index.php [NC,L]
注意评论/回答我的1到8条评论?
非常感谢。
ps-我应该把所有这些问题放在不同的帖子上吗?
的更新: 我在这里有很多问题,我无法理解。当我们不了解自己的问题时,这是一个不好的迹象。事实上,最好的办法是将所有这些分成更小的部分。这就是说:
关于第3点):
所以,在这里:
RewriteCond %{REQUEST_FILENAME} !^(filename1|filename2)
我们正在比较,让我们说:
/home/mysuser/public_html/something.php
使用:
filename1或filename2
我们将^
指向
“字符串的开头”
。
由于filename1不是以/
开头,而是以
REQUEST_FILENAME
将会出现永远的情况。
但是,我们确实有!
否定了所有内容。
所以,
我们正在比较(例如):
/home/mysuser/public_html/something.php
带有“不以”开头的内容(^
部分)/
(因为我们的文件名在开头不会有斜杠)因此,所有条件将始终评估为true。
具有始终评估为真或总是评估为假的条件, 不是很好。所以我相信。我最好离开它。
如果所有这些假设都是正确和精确的: 三个问题:
1)似乎如果我们能够以某种方式将^部分移除到与所有字符串匹配的东西,那会更好吗?
2)有没有其他方法可以执行所请求的事情: “如果我们想要排除某些文件被重定向,请编码什么?”
3)通过查看这个htaccess文件,我无法理解:这条件应遵循什么规则?
我可以帮你解决这些问题吗?
再次感谢。
答案 0 :(得分:1)
RewriteEngine on
来启用运行时重写引擎。 /
开头。请注意,这是绝对文件系统路径,而不是URI路径(即 REQUEST_URI )。-
替换不会更改URI,但在与 L 标志结合使用时会停止当前的重写过程。请注意,该模式将匹配以这些前缀而不仅仅是目录开头的任何路径。/
内部重写/public/index.php
的请求。但是,永远不会应用此规则,因为 REQUEST_URI 永远不会为空但至少/
,因此永远不会满足条件。第二条规则将对任何URI路径执行相同操作,除非它已经以/public/
开头。第三条规则将传递任何可以映射到现有文件的请求。