如何将htaccess用于动态生成的URL

时间:2009-07-18 07:06:34

标签: .htaccess

我看到使用此约定的网站。

hxxp://www.twitter.com/golem

hxxp://www.twitter.com/golem/following

我想在我的网站上这样做。 “golem”是动态的,基本上就是用户名。

所以hxxp://www.mysite.com/golem会去golem页面。

hxxp://www.mysite.com/golem/details.php将转到golem的详细信息页面。

问题是:

  1. 如何制作htaccess以便它总是将& user_name = golem添加到查询字符串中的所有php文件中?没有在浏览器地址栏中显示它。所以基本上它需要采用具有斜杠的URL的第一个路径,并将其作为查询添加到我正在查看的任何PHP页面的末尾。

  2. 如何制作如此hxxp://www.mysite.com/golem/details.php实际上在hxxp://www.mysite.com/details.php?user_name = golem的实际位置运行文件(路径中没有“golem”)WHILE仍然在地址栏中显示虚假URL。

  3. 让它适用于其他网址,例如hxxp://www.mysite.com/golem/page.php和hxxp://www.mysite.com/golem/view.php等等

  4. 看了教程等但找不到答案。感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

如果尚未启用mod_rewrite,则启用它。 在你的.htaccess中,你必须添加一些RewriteRule。

试试这个:

RewriteRule ^([^/]+)/([^?]*)\??(.*)$ $2?$3&user_name=$1 [L]

如果不起作用,请试试这个:

RewriteRule ^/([^/]+)/([^?]*)\??(.*)$ $2?$3&user_name=$1 [L]

但是有一个对应物:如果你有经典的URL,它们将被这些规则捕获。如果您可以区分用户名和脚本名称,则可以使用解决方案。假设用户名不能包含点。然后,您将用这个替换规则:

RewriteRule ^([^/.]+)/([^?]*)\??(.*)$ $2?$3&user_name=$1 [L]

(注意第一个括号中的点 - 它表示如果网址包含一个点,那么它将与规则不匹配。)

现在,在参数之前包含点的每个网址都将被视为“普通”网址。

如果用户名包含一个点,我们就会遇到问题,因为你怎么能说details.php是php脚本或用户名?在这些情况下,编写仅匹配我们想要的RewriteRules变得非常困难。而且测试它们也很困难,因为有很多边缘情况很难想到。