【问题标题】:How to remove a category from url?如何从网址中删除类别?
【发布时间】:2013-06-08 09:38:11
【问题描述】:

现在我有 urls 例如:

mysite.com/category/football
mysite.com/category/volleyball
mysite.com/category/hockey

并且对应规则:

RewriteRule ^category/([^/]*)$ category/index.php?name=$1 [L,QSA]

但我也有其他页面,例如:mysite.com/feedback 或其他...

如何从url中删除category而不影响其他页面?

如果我这样做:

RewriteRule ^(.*)$ index.php?category=$1 [L]

每个其他页面都是一个类别,也许它必须是这样的:

RewriteRule ^(football|volleyball|hockey)$ category/index.php?category=$1 [L,QSA]

但类别可以不同。管理员可以添加新类别或删除|更改旧类别。

更新

我在文件中做了一个例子:

反馈/index.php

   <h1>Feedback</h1>

.htaccess

RewriteEngine On
RewriteBase /
RewriteRule ^/(.*)$ category.php?category=$1 [L,QSA]

category.php

// controller category

echo "This is a Category: <br />";

if (isset($_GET['category']) and !empty($_GET['category']))
{
    echo "<b>".$_GET['category']."</b>";
}

index.php

<a href="/football">Football</a>
<a href="/volleyball">Volleyball</a>
<a href="/hockey">Hockey</a>

<p>
    <a href="/feedback">Feedback</a>
</p>

所以你可以感受到这个麻烦。

【问题讨论】:

  • 为什么不添加规则RewriteRule ^feedback/([^/]*)$ feedback/index.php?name=$1 [L,QSA]
  • @AviAtion:与其他 URL 关联的RewriteRule 是什么?您是否只有此类 URL 的特定列表,或者它们也应该是动态的?

标签: php .htaccess mod-rewrite


【解决方案1】:

您似乎想在您的 URL 中支持 dynamic(不一定是 predefined)。如果您事先知道这些类别并且它们不会与其他 URL 冲突,则可以添加此重写规则。

但如果这应该是动态的,重写规则是毫无疑问的。在这种情况下,您应该在您的应用(或任何其他有权访问包含可用类别信息的数据库的地方)中处理 URL。

另一方面,如果类别列表是动态的,但每个其他 URL 都是预定义的(例如,“feedback”可能是),只需将负责这些预定义 URL 的重写规则放在负责类别的重写规则之前- 他们会占上风。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 2021-03-17
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 2014-06-25
    相关资源
    最近更新 更多