了解.htaccess文件的1行

时间:2011-02-21 16:05:20

标签: apache .htaccess mod-rewrite

我现在有以下.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文件,我无法理解:这条件应遵循什么规则?

我可以帮你解决这些问题吗?

再次感谢。

1 个答案:

答案 0 :(得分:1)

    始终需要
  1. RewriteEngine on来启用运行时重写引擎。
  2. 与mod_rewrite无关。
  3. 此条件将始终为真,因为 REQUEST_FILENAME 值始终以/开头。请注意,这是绝对文件系统路径,而不是URI路径(即 REQUEST_URI )。
  4. 是的,使用-替换不会更改URI,但在与 L 标志结合使用时会停止当前的重写过程。请注意,该模式将匹配以这些前缀而不仅仅是目录开头的任何路径。
  5. 此规则可能是拒绝访问.htaccess文件。但是,您的Web服务器应该已经涵盖了这一点。
  6. 第一条规则可能应该在/内部重写/public/index.php的请求。但是,永远不会应用此规则,因为 REQUEST_URI 永远不会为空但至少/,因此永远不会满足条件。第二条规则将对任何URI路径执行相同操作,除非它已经以/public/开头。第三条规则将传递任何可以映射到现有文件的请求。
  7. 此文件扩展名列表相当广泛。可以使用 NC 标志来处理大写/小写问题。但是这个规则不应该适用于现有文件,因为之前的规则已经捕获它了。