【问题标题】:htaccess url alias / clean urls - phphtaccess url 别名/干净的 urls - php
【发布时间】:2012-12-11 19:57:47
【问题描述】:

您好,我已经尝试了 1 周来修复我自定义构建的网站上的一些网址,但我无法 100% 完成我想要的。所以这是我的问题:

我有一个管理事件的 php 登录页面,默认的 url 结构是这样的:

foreach($resultSet as $key => $event)
{
    echo '<a href="/event.php?eid='.$event['eid'].'&cat='.$event['categroy'].'&title='.urlencode($event['title']).'">content</a>';
}

你可以看到url格式是这样的

/event.php?eid=145&amp;cat=metal&amp;title=Great+gig

我希望通过 htaccess 是这样的

domain.com/event/metal/Great gig

我一直在阅读 htaccess 指南,但我无法在 url 上使用更多 tahn 1 参数,请告知,谢谢。

【问题讨论】:

    标签: php .htaccess mod-rewrite url-rewriting


    【解决方案1】:
    1. 更改您的 php 代码,使其生成类似于 domain.com/event/metal/Great gig 的 URL:

      echo '<a href="/event/'.$event['eid'].'/'.$event['categroy'].'/'.urlencode($event['title']).'">content</a>';
      

      (请注意,'category' 在您的示例中拼写错误)

    2. 在您的文档根目录的 htaccess 文件中添加这些规则,最好在您可能已经存在的任何规则之上:

      RewriteEngine On
      RewriteRule ^/?event/([^/]+)/([^/]+)/(.+)$ /event.php?eid=$1&cat=$2&title=$3 [L,QSA]
      

    此外,如果您有不受您控制的链接仍然有查询字符串,您可以添加以下规则:

    RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /event\.php\?eid=([^&]+)&cat=([^&]+)&title=([^\ ]+)
    RewriteRule ^ /event/%2/%3/%4? [L,R=301]
    

    【讨论】:

    • 非常感谢您的回复!我可以再问一件事,以便从 url 别名中隐藏 eid 以仅创建 1 个 get 变量,该变量将传递整个事物,例如 ?var=category/title/eid/ 然后以某种方式在 htaccess 中排除开斋节部分?
    • @PanagiotisGeorgeRaditsas 如果从 URI 中排除 eid,则它永远不会传递给 event.php 脚本。如果您不需要 eid,则只需删除它的匹配项,(第一个 ([^/]+)/ 并删除目标 eid=$1&amp; 并将反向引用重新编号以从 1 开始)
    • 我面临的问题是我有多个具有相同标题的事件,因为 1 个事件可以每周重复一次,依此类推......但每个事件都有一个唯一的事件 ID (eid),我有使用以获得我想要的事件。任何想法如何完成这个?
    • @PanagiotisGeorgeRaditsas 那么你必须在漂亮的 URL 中包含 eid。否则,您将永远失去它们。
    猜你喜欢
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多