为了账号安全,请及时绑定邮箱和手机立即绑定

htaccess 如何重写这个url

htaccess 如何重写这个url

PHP
GCT1015 2023-08-19 14:09:55
如何重写此 URL:https://example.com/illustrations.php?category=cats&cat_id=1到:https://example.com/category/cats另外,我如何保留cat_id参数?我尝试了这个,但它不起作用:RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^/?category/(.*?)/?$ /illustrations.php?category=$1 [L]
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

当我添加此代码并转到illustrations.php?category=cats它时,不会更改浏览器栏中的 URL。

对,那是正确的”。

您在内部发布的代码URL /category/cats(您应该在 HTML 源中链接到的 URL)重写回实际的文件系统/URL 路径:/illustrations.php?category=cats。为了使“漂亮”的 URL /category/cats“有效”,这是必需的。

您不能.htaccess仅使用 - 如果这就是您所暗示的内容来更改 URL 结构。您确实需要实际更改 HTML 源中的物理 URL。

您可以使用 实现从规范 URL 的外部重定向(而不是重写),但请注意,这只是为了有利于 SEO(以及可能已经链接到旧 URL 的第三方)。如果您要更改现有的 URL 结构并且 SEO 是一个问题,那么这是一个必要的附加步骤,但它不是您网站“工作”的一部分。/illustrations.php?category=cats/category/cats.htaccess

我如何仍然保留cat_id参数

您需要在 URL 中包含参数的值。cat_id例如。/category/cats/1(正如 @arkascha 在评论中建议的那样)或/category/1/cats- 取决于哪个值更重要。我会把更重要的值放在第一位,因为共享时 URL 可能会被意外裁剪。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?category/(.*?)/?$ /illustrations.php?category=$1 [L]

这条规则可以简化。文件系统检查相对昂贵。看来您可以通过使正则表达式更加具体来删除这两个内容。例如。可以/category/1/cats映射到文件吗?您需要可以访问目录吗?我希望这两个问题的答案都是“否”。

我还将决定是否允许尾随斜杠,而不是同时允许两者(如您当前的规则所示)。严格来说,这会创建重复的内容(两个 URL;相同的内容),因此需要额外的步骤来解决。您的示例 URL 不包含尾部斜杠。

因此,您可以将规则简化为以下形式,以便重写/category/1/cats(无尾部斜杠)为/illustrations.php?category=cats&cat_id=1

RewriteEngine On
RewriteRule ^category/(\d+)/([\w-]+)$ /illustrations.php?category=$2&cat_id=$1 [L]

假设cat_id可以是 1 位或多位数字 ( 0-9)。并且category仅限于以下字符:a-zA-Z0-9_(下划线)、-(连字符)。

对于正则表达式,最好尽可能限制。.通过省略上述规则中最后一个路径段中的点 ( ),它无法匹配物理文件(假设所有文件都有文件扩展名)。


查看完整回答
反对 回复 2023-08-19
  • 1 回答
  • 0 关注
  • 71 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信