1

我试图了解 mod_rewrite 是如何工作的。例如,如果我有这样的 URL:

example.com/user.php?id=123

使用 mod_rewrite 我可以创建如下 URL:

example.com/user/123

现在可以了,但是在我的应用程序的其他位置,我已经使用旧格式链接到用户页面,例如:

<a href="user.php?id=123">123</a>

现在这是否意味着我需要手动更改所有这些链接并且应该根据新格式进行链接?例如:

<a href="user/123">123</a>

或者这也应该用 mod_rewrite 来完成?我没有使用任何 PHP 框架。

4

2 回答 2

2

从长远来看,是的,您必须更改它,但您也可以重定向:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

# Externally redirect /user.php?id=123 to /user/123
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(user)\.php\?id=([^&\s]+) [NC]
RewriteRule ^ /%1/%2? [R=301,L]

# Internally forward /user/123 to /user.php?id=123
RewriteRule ^user/([0-9]+)/?$ /user.php?id=$1 [NC,L]

外部重定向是在浏览器上更改 URL 的重定向,内部重定向是不更改 URL 但显示其他地方的内容的重定向。

虽然上面会重定向用户:

example.com/user.php?id=123

example.com/user/123

如果您将链接更改为使用对 SEO 友好的链接,以避免用户在您的网站上访问或导航时出现额外的重定向,那将是最好的。

于 2013-09-27T08:56:16.463 回答
-2

找到数据库中的所有链接并替换

UPDATE `myTable`
SET myCol = REPLACE(myCol, '<a href="user.php?id=', '<a href="user/')
WHERE keyCol = testKey;

做整个表,删除WHERE子句

我认为这行得通,我现在不怎么玩 sql

于 2013-09-27T08:56:53.313 回答