请帮助我为 mod_rewrite 创建正确的说明。这似乎非常困难。
我需要以下内容:
1.从www.site.com重定向到site.com。
www.site.com/hello ==> site.com/hello
www.site.com/abc/def ==> site.com/abc/def
等等,然后应该应用其他规则。
2、直接访问(不重写)一些指定的文件和文件夹(如robots.txt、images/等)
也许
RewriteCond %{REQUEST_URI} !^/(robots.txt|favicon.ico|images|documents|~.\*)
我对吗?所以,像这样的网址
site.com/robots.txt ==> site.com/robots.txt
site.com/documents/file1.pdf ==> site.com/documents/file1.pdf
应该保持原样,不应该被重写。
3.另一种转变:
site.com/index.php?anythinghere ==> site.com/a/index.php?anythinghere
4. 但是如果我们输入 URLs site.com 和 site.com/ Apache 应该调用根文件夹中的 index.php (site.com/index.php)
site.com ==> site.com/index.php
site.com/ ==> site.com/index.php
5. 我有 MVC 脚本,如果我们键入以下 URL:
1. site.com/controller or site.com/controller/ or site.com/controller//
2. site.com/controller/function or site.com/controller/function/
3. site.com/controller/function/parameter or site.com/controller/function/param1/param2/param3
如果控制器是列表中预定义的单词之一,比如“index”、“news”、“contacts”(可能会扩展到几百个单词),那么我们应该调用 index.php,重写 URL以下方式:
site.com/controller ==> site.com/index.php?q=controller
site.com/controller/ ==> site.com/index.php?q=controller/
site.com/controller// ==> site.com/index.php?q=controller//
site.com/controller/function ==> site.com/index.php?q=controller/function
site.com/controller/function/ ==> site.com/index.php?q=controller/function/
site.com/controller/function/parameter ==> site.com/index.php?q=controller/function/parameter
site.com/controller/function/param1/param2/param3 ==> site.com/index.php?q=controller/function/param1/param2/param3
6. 最后,如果没有应用所有之前的规则,我们应该重写
site.com/anythinghere ==> site.com/a/index.php?anythinghere
希望apache不要递归地使用mod_rewrite,否则我会对不同的index.php有很大的麻烦。
我知道这并不容易,但如果你能帮助为一个项目创建规则,那就太好了。
提前致谢!