有人可以向我解释这些.htaccess
规则的含义吗?
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
答案 0 :(得分:1)
让我们一步一步地做:
Options -MultiViews
多视图搜索由多视图选项启用。如果服务器收到
/some/dir/foo
的请求并且/some/dir/foo
不存在,那么服务器将读取目录,查找名为foo.*
的所有文件,并有效地伪造一个类型映射,其中列出了所有这些如果客户端通过名称请求其中一个文件,则为它们分配相同的媒体类型和内容编码。然后,它会根据客户的要求选择最佳匹配,并返回该文档。
RewriteEngine On
RewriteEngine 指令启用或禁用运行时重写引擎。如果设置为off,则此模块根本不进行运行时处理。它甚至不更新
SCRIPT_URx
环境变量。使用此指令禁用特定上下文中的规则,而不是注释掉所有RewriteRule指令。
请注意,重写配置不会被虚拟主机继承。这意味着您需要为要在其中使用重写规则的每个虚拟主机指定RewriteEngine on。
RewriteRule ^(.*)/$ /$1 [L,R=301]
此规则将捕获带有斜杠的任何请求,例如http://www.example.com/test/
。
在此请求中,只有test
部分会被捕获,因为尾随/
位于捕获括号( )
之外。
然后它会将用户重定向到http://www.example.com/
+捕获字符串test
:http://www.example.com/test
。 [L]
标志表示不会检查其他规则。 [R=301]
标记表示用户将使用301
代码重定向到此页面。
因此,此规则的目的是删除尾部斜杠。
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
这部分通常称为Dispatcher。任何未指向文件(%{REQUEST_FILENAME} !-f
)或目录(%{REQUEST_FILENAME} !-d
)的请求都将发送至index.php
。
此规则的目的是将重写的查询(例如http://www.example.com/user/1/florian
(文件系统上没有名为user/1/
的文件夹florian
)重定向到index.php谁将能够处理这个请求。