寻找指导重写特定的URL

时间:2011-06-22 15:23:10

标签: php .htaccess mod-rewrite

我已将CMS更改为我的网站,并且已将网址重写为更友好,但我有20个网页链接到网络上的不同网站。我希望当人们点击那些旧链接时,他们会被重定向到新的相应帖子。

我最初想的是使用带有javascript重定向的PHP数组,但现在我在想.htaccess mod-rewrite是最好的。

将特定网址重定向到新网址的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

使用.htaccess文件进行重定向。例如:

# This allows you to redirect index.html to a specific url
Redirect /index.html http://example.com/location/

添加一些正则表达式以匹配您的重写并发送到动态创建的远程URL。例如:

# Dynamic redirect
RedirectMatch 301 yourUrl/\(.*)\$ http://external.com/someUrl.html?dynamicVal=$1

那将发送... yourUrl / 123 - > http://external.com/someUrl.html?dynamicVal=123

答案 1 :(得分:2)

如果您在谈论网页上的网址,那么最好的方法是使用 当前正确的网址 编辑所有此类网页。< / p>

如果您正在谈论“当某人点击我的旧网址时该怎么办(例如,从他们的书签或点击其他网站上的链接),那么最好的方法是重定向(使用代码301)使用Apache的URL重写模块向新位置发出此类请求。

示例:

# Activate Rewrite Engine
RewriteEngine On

# redirect to another page on the same site
RewriteRule ^mypage.php /other/mypage.php [R=301,L,QSA]

# redirect to another page on ANOTHER site
RewriteRule ^mypage.php http://www.anothersite.com/mypage.php [R=301,L,QSA]

以下是Apache's manual for mod-rewrite的链接。

另一个有用的地方 - Mod_Rewrite Forums

答案 2 :(得分:0)

Apache支持不同的模块来重写/重定向请求的URI:

  • mod_aliasAliasAliasMatch用于内部重写,RedirectRedirectMatch用于外部重定向
  • mod_rewrite RewriteRule用于内部重写和外部重定向

mod_alias和mod_rewrite指令之间的主要区别在于mod_alias的AliasRedirect指令适用于路径前缀模式,而其他指令(即AliasMatchRedirectMatch,和RewriteRule)使用正则表达式。

当路径前缀模式是所请求路径的限定前缀并且其余路径段自动附加到目标路径时,它始终始终匹配。这是一个例子:

Redirect /foo/bar http://other.example/quux

如果请求/foo/bar,则会将其重定向到http://other.example/quux;同样/foo/bar/baz正被重定向到http://other.example/quux/bazAlias的工作方式相似但只是内部工作。

与此相反,AliasMatchRedirectMatchRewriteRule使用正则表达式,不仅可用于匹配路径前缀。这是一个例子:

RedirectMatch ^/foo/bar$ http://other.example/quux

如果请求/foo/bar,则会将其重定向到http://other.example/quux(就像上面的Redirect示例一样)。但是,如果请求/foo/bar/quux,则不会重定向,因为^/foo/bar$/foo/bar/quux不匹配。

mod_alias和mod_rewrite之间的差异是mod_rewrite还可以检查URI的其他部分,除了路径甚至HTTP请求头字段。它还允许在多种条件下进行更复杂的操作。