使用htaccess创建SEO友好的URL

3

我正在尝试重写网站的URL,需要说明的是现在index.php的工作方式是获取p(页面)参数并包含相应的文件。

因此请求页面的方式如下:

www.domain.com/index.php?p=home
www.domain.com/index.php?p=search
www.domain.com/index.php?p=profile
www.domain.com/index.php?p=contact

我找到了如何创建此重写规则的方法:

我发现可以创建一个重写规则来实现这个功能:

RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?p=$1

现在,www.domain.com/home 将为我提供主页。

但是,我还需要一个友好的 URL。

www.domain.com/index.php?p=profile&id=20

to

www.domain.com/profile/20/profile-friendly-name

or better

www.domain.com/profile/profile-friendly-name

*“profile-friendly-name”指的是公司名称

要求:

  1. 所有页面都需要有友好的URL,例如:/home,/contact

  2. 在个人资料页中需要一个特定的友好URL,其中包含个人资料名称

我的问题:

  1. 如何在现有的URL格式(index.php?p=profile&id=20)中添加profile-friendly-name到URL中?

  2. 我只能在那里放一个唯一的名称吗(不带ID),就像我最后一个示例一样?

  3. 如果我成功了,我是否需要将站点内所有现有的URL(链接、图像URL、文件URL)更改为友好的格式?

  4. 我注意到应用第一个RewriteRule之后,一些CSS样式表和JS未被包括。这是怎么回事?


1
最好不要在一个帖子中问太多问题。 - anubhava
你应该考虑使用MVC框架来实现SEO友好的URL,而不是使用htaccess。 - AnchovyLegend
是的,我知道@anubhava,但我感到困惑... - user998441
我现在不能使用MVC,也不能改变网站的结构,因为这是一个大项目。 - user998441
你将从哪里获取/profile-friendly-name - anubhava
2个回答

8
RewriteRule ^profile/([0-9]+)/([A-Za-z0-9-]+)/?$ index.php?p=profile&id=$1

适用于:

www.domain.com/index.php?p=profile&id=20

to

www.domain.com/profile/20/profile-friendly-name

那么我只需将个人资料的名称回显到链接中(在ID之后),并仅使用ID获取个人资料信息? - user998441
添加规则后,所有 www.domain.com/profile/<id here>/profile-friendly-name 格式的 URL 应该可以正常工作... - Amal
这是一个非常有帮助的解决方案。 - arefindev

4

示例 1: https://example.com/books.php?bookName=php 使用 htaccess 后,URL 将被写成 https://example.com/php

您可以在 .htaccess 文件中使用下面的代码实现此功能:

RewriteEngine On
RewriteRule ^([^/\.]+)/?$ books.php?bookName=$1

示例2:

https://example.com/books.php?bookName=php&&chapter=array 使用 htaccess ,URL 将被写成 https://example.com/php/array

您可以使用以下 .htaccess 文件中的代码来实现:

RewriteEngine On
RewriteRule ^([^/\.]+)/([^/\.]+)?$ books.php?bookName=$1&chapter=$2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接