帮助在动态和静态URL上使用mod_rewrite

时间:2010-10-29 13:22:31

标签: php mod-rewrite

我查看了这个主题:configuring search engine friendly url (mod_rewrite)并了解重写规则将如何应用,但需要帮助了解如何为具有静态和动态网址的网站采用这些规则。

从上面的主题中,重写规则首先会查找URL中存在的文件并将其传递。这样就可以覆盖我的静态页面了。

问题1:是否会保留索引(换句话说,domain.com/foo会显示domain.com/foo/index.php)?

问题2:有没有办法使用单个模板文件和这些静态页面(所以静态文件实际上只是内容)?目前,我的重写规则将所有URL指向查找所请求文件的主模板文件,然后将其包含在内。

继续,重写规则会将您重定向到index.php,以查找与上述规则不匹配的任何URL。我假设我希望我的代码确定它是否是我网站的实际网址,并相应地提供内容。

问题3:重定向到index.php不会传递任何要处理的变量。如果我使用index.php?url = $ 1那个帐户同时适用于domain.com/hi和domain.com/hi/there?

问题4:我可以采取哪些步骤来确保处理的URL是合法的(而不是xss攻击或类似的东西)?我应该在MySQL数据库中设置一个单独的表来存储所有可能的URL以及内容的ID吗?我认为这是Wordpress的工作方式。或者,如果不使用MySQL,我会用类或数组吗?

我知道这很多,提前感谢大家的帮助!

1 个答案:

答案 0 :(得分:2)

仅供记录:如果没有另外提及,以下所有答案均参考jiewmeng’s configuring search engine friendly url (mod_rewrite)中提到的这些规则:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
  

问题1:是否会保留索引(换句话说,domain.com/foo会显示domain.com/foo/index.php)?

如果您引用DirectoryIndex指定的索引文档,那么,是的,因为 REQUEST_FILENAME 将引用现有目录,比较器-f将产生true并且不会重写会发生。

  

问题2:有没有办法使用单个模板文件和这些静态页面(所以静态文件实际上只是内容)?目前,我的重写规则将所有URL指向查找所请求文件的主模板文件,然后将其包含在内。

不,那是不可能的。未由handler进一步处理的静态文件将直接发送到客户端。

  

问题3:重定向到index.php不会传递任何要处理的变量。如果我使用index.php?url = $ 1那个帐户同时适用于domain.com/hi和domain.com/hi/there?

在上面提到的示例中,您可以使用$_SERVER['REQUEST_URI']来获取request line中显示的原始请求的URI路径和查询字符串。因此,即使是原始请求的查询字符串也将被保留。

  

问题4:我可以采取哪些步骤来确保处理的URL是合法的(而不是xss攻击或类似的东西)?我应该在MySQL数据库中设置一个单独的表来存储所有可能的URL以及内容的ID吗?我认为这是Wordpress的工作方式。或者,如果不使用MySQL,我会用类或数组吗?

是的,您一定要知道哪些网址有效且哪些网址无效。通常,应用程序通过解析请求并尝试查找请求的资源来做出此决定。如何完成取决于您的应用程序的功能及其执行方式。