1

在我的应用程序中,我想实现 URL 重写以使链接 SEO 友好

1.http://example.com/item.php?act=view&id=192
2.http://example.com/feedback.php?id=146

1.http://example.com/items/itemsname
2.http://www.example.com/username

问题

1)我有点困惑,我是否需要将代码中的所有链接更改为http://example.com/items/itemsname并使用重写将其转换为http://example.com/item.php?行为=视图&id=192

或者

我可以保留我的代码,因为它是http://example.com/item.php?act=view&id=192并重写它以转换为http://example.com/items/itemsname(选项 2 看起来更现实否则没有 .htaccess 什么都行不通)

2)如何在 Apache 和 Php 中做到这一点?

4

3 回答 3

1

我有点困惑,我是否需要将代码中的所有链接更改为http://example.com/items/itemsname并使用重写将其转换为http://example.com/item.php?act=查看&id=192 ?

如果可以的话,你想这样做。这意味着您没有对每个被点击的链接进行另一层处理。

翻译有点模棱两可。例如:

/username->/feedback.php?id=146

我假设的“用户名”类似于“sam”,但“id”是一个数字。rewrite 模块对这个映射一无所知,htaccess 文件中的任何内容都不知道用户名如何映射到 id 或项目名称如何映射到 id 唯一可以做的是使用RewriteMap在访问此映射的服务器/虚拟主机配置中定义的。

你最好做的是使用php。将项目和用户名映射到item.phpfeedback.php脚本。让这些脚本根据名称找出 id。让这些脚本检查请求 URI 以查看请求是否直接针对 php 文件而不是针对 SEO 的 URL,并根据需要重定向它们。

您希望 mod_rewrite 做的唯一一件事就是进行正向映射:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond ^item/(.*)$ /item.php?act=view&name=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond ^(.*)$ /feedback.php?name=$1 [L]

在这里,您将查找“ name”参数,将它们映射到您需要的 ID,然后正常进行。

于 2013-08-28T19:54:25.293 回答
1

你有几种方法可以做到这一点,我想说,使用当前 PHP 最简单的方法是将链接更改为如下内容:

http://example.com/items/id-itemsname
http://example.com/id-username

所以一个真实的例子看起来像这样:

http://example.com/items/192-Wash-Machine
http://example.com/feedback/146-Jon-Lin

然后你可以很容易地使用这个规则来转换它:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^items/([0-9]+)-.*$ /item.php?act=view&id=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^feedback/([0-9]+)-.*$ /feedback.php?id=$1 [L]

这样,您可以完全忽略标题并从中获取 ID 并使用您当前的脚本,同时仍向用户显示标题。

另一种方式就像你提到的那样,它看起来像这样:

http://example.com/items/itemsname
http://example.com/feedback/username

然后,您需要更改 PHP 以按名称查找反馈和项目,因此它们看起来像这样:

http://example.com/item.php?act=view&name=Wash Machine
http://example.com/feedback.php?username=Jon Lin

规则是这样的:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^items/([^/]+)/?$ /item.php?act=view&name=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^feedback/([^/]+)/?$ /feedback.php?username=$1 [L]
于 2013-08-28T21:12:21.120 回答
0

这将对您有所帮助:URL 重写和 301 重定向 - 它是如何工作的?

就个人而言,我认为正确的方法是更改​​所有链接并使用 .htaccess 文件重写 url(显然,您需要在重写后将 nice-name [aka slug] 转换为 id)。我尽量避免重定向,除非它们是 100% 必要的,但事实并非如此。像这样的东西:

.ht 访问:

RewriteRule ^items/([0-9a-zA-Z\-\_].*)$ item.php?act=view&slug=$1 [L]

关于链接,您可以手动(我推荐)或通过 JavaScript 更改它们,在用户点击后制作某种翻译功能。

于 2013-08-28T18:02:08.077 回答