在mod_rewrite之后重定向URL?

时间:2013-09-27 08:36:05

标签: php apache .htaccess mod-rewrite

我正在尝试理解mod_rewrite是如何工作的。例如,如果我有一个像:

这样的网址
example.com/user.php?id=123

使用mod_rewrite我可以创建URL Like:

example.com/user/123

现在没问题,但在我的应用程序的其他位置,我已使用旧格式链接到用户页面,例如:

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

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

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

或者是否应该使用mod_rewrite? 我没有使用任何PHP框架。

2 个答案:

答案 0 :(得分: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友好链接以避免在用户访问或浏览您的网站时的额外重定向,那将是最好的。

答案 1 :(得分:-2)

找到db中的所有链接并替换

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

执行整个表格,删除WHERE子句

我认为这样可行,我现在不玩sql很多