【问题标题】:How to use htaccess for dynamic generated URLs如何将 htaccess 用于动态生成的 URL
【发布时间】:2009-07-18 07:06:34
【问题描述】:

我看到使用这种约定的网站。

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”)同时仍然在地址栏中显示虚假 URL。

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

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

【问题讨论】:

    标签: .htaccess


    【解决方案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]
    

    (请注意第一个括号中的点——它表示如果 url 包含点,那么它将不符合规则)。

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

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

    【讨论】:

    • 非常感谢 FWH。它似乎有效,但由于某些奇怪的原因,我无法再读取 URL 参数的其他部分。我可以使用 $_REQUEST['user_name'] 获取用户名,但如果 URL 类似于 hxxp://www.mydomain.com/details.php?item_id=23 ,那么由于某些奇怪的原因,我无法从 URL 中获取 item_id。有人知道为什么吗?
    • 这是因为上面的规则会捕获每个 url 并将第一部分视为用户名,即使它是“details.php”。如果您可以将用户名与脚本名称区分开来(例如,如果用户名不能包含点),那么您应该将规则替换为仅捕获没有脚本名称的 url 的内容。我正在更新我的答案以反映这一点。
    • 感谢 FWH。但它似乎仍然不起作用。我在 URL 中请求了 item_id,但它不会给我。但是它确实给了我用户名。
    • 我想我想说的是我想要以下内容:hxxp://www.mydomains.com/golem/details.php?item_id=22。在我的脚本中,我想同时获取 22 的 item_id 和 golem 的用户名。那可能吗?你是说如果 URL 有 .php,它将无法从“golem”和 22 的 item_id 中获取两个用户名?
    • AHHH... 添加 [QSA,L] 到最后似乎有效。让我进一步测试。所以它更像是 RewriteRule ^([^/]+)/([^?]*)\??(.*)$ $2?$3&user_name=$1 [QSA,L]
    猜你喜欢
    • 2013-10-02
    • 2013-04-28
    • 1970-01-01
    • 2015-12-04
    • 2014-03-08
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 2015-01-21
    相关资源
    最近更新 更多