1 回答
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-z
、A-Z
、0-9
、_
(下划线)、-
(连字符)。
对于正则表达式,最好尽可能限制。.
通过省略上述规则中最后一个路径段中的点 ( ),它无法匹配物理文件(假设所有文件都有文件扩展名)。
- 1 回答
- 0 关注
- 71 浏览
添加回答
举报