【问题标题】:Use htaccess for a redirect使用 htaccess 进行重定向
【发布时间】:2013-03-29 04:48:40
【问题描述】:

我正在使用以下代码将我的所有页面从 .php 更改为简单的 /

RewriteRule ^(.*)/$ $1.php [L]

现在出现 www.site.com/clubs/ 或 www.site.com/training/ 而不是 www.site.com/clubs.php 和 www.site.com/training.php

现在我想在俱乐部内显示俱乐部(使用数据库中的数据),页面将显示为 www.site.com/clubs/my-club/
所有 my-club 数据都将在数据库中,包括 url 字段中的链接。

我可以用下面的代码得到这个。但是,当我使用 $_GET['club'] 方法回显时,它会显示 my-club.php 而不仅仅是 my-club。

RewriteRule ^clubs/([^/]*)$ clubs.php?url=$1 [L]

url中的结尾/似乎变成了.php

【问题讨论】:

  • 重写规则是如何排序的?我想这取决于那个
  • 将文件从 file.php 更改为 file/ 的第一个是俱乐部一个

标签: php .htaccess redirect


【解决方案1】:

您可以通过不同的方式实现您的需求,但我会这样做。 更改规则顺序,如下所示:

RewriteRule ^clubs/([^/]*)/$ clubs.php?url=$1 [L]
RewriteRule ^(.*)/$ $1.php [L]

我在第一条规则中添加了斜杠,因为我猜它是模式的一部分。如果我错了,你可以删除它。

如果您想从原始请求 URL 附加任何查询字符串,您应该使用 QSA 和 L,所以 [L,QSA]

【讨论】:

  • 我读过那个查询字符串,但我从来不明白。这与使用 [L] 有何不同?
  • 不同之处在于使用QSA 类似www.site.com/clubs/my-club/?k1=v1&k2=v2 的URL 将被重写为clubs.php?url=my-club&k1=v1&k2=v2;如果没有 QSA,查询字符串将被忽略。当然,这一切都取决于您的需求。
  • 如果我通过 my-club 页面传递参数,那么我可能会遇到这种情况?
【解决方案2】:

试试这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9a-zA-Z\-]+?)/([0-9a-zA-Z\-]+?)?$ $1.php?url=$2

你在跑什么:

http://localhost/club/

结果是

http://localhost/club.php

你在跑什么:

http://localhost/club/my-club

结果是

http://localhost/club.php?url=my-club

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2018-09-05
    • 2011-08-29
    • 2017-04-15
    • 2013-06-24
    • 2015-08-15
    • 2014-02-03
    • 2015-05-30
    相关资源
    最近更新 更多