2010-10-29 37 views
2

我看了这个主题:configuring search engine friendly url (mod_rewrite)并理解重写规则如何应用,但需要帮助了解如何将它们用于具有静态和动态URL的网站。在动态和静态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

您可能想将您的问题分解为四个单独的问题 - 您可能会得到更好更快的响应 – SW4 2010-10-29 13:28:12

+0

谢谢,部分挑战是2和3有关。我认为,即使他们中的一个被回答,我也可以推断出其余的。 – 2010-10-29 14:17:39

回答

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:将索引保存下来(换句话说,域。 com/foo会显示domain.com/foo/index.php)?

如果你指的是由DirectoryIndex指定的,那么,是索引文档,如REQUEST_FILENAME将指向现有的目录,则比较-f会产生真实而没有改写将发生。

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

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

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

在提到的例子中,你可以使用$_SERVER['REQUEST_URI']得到原始请求的URI路径和查询字符串,因为它出现在request line。所以即使原始请求的查询字符串将被保留。

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

是的,你一定要知道哪些网址是有效的,什么是无效的。一般来说,应用程序通过解析请求并尝试查找请求的资源来执行此决定。如何完成取决于你的应用程序的功能以及它是如何做到的。

+0

哇,非常感谢你! – 2010-10-30 13:16:17