1

这是我在这里的第一个要求,希望我不会让任何人感到不安。

这是我的故事:

我在这个地方到处寻找解决方案,但找不到。这里希望有人可以提供一些输入。

我基本上已经设法使用 Apache 的mod_rewrite为我的网站创建 SEO 友好的 url。

例如,旧路径www.hostname/index1.php?session=user现在被重写为www.hostname/user,这会导致 SEO 友好的 URL 地址。

但是,旧路径仍然有效。我需要以某种方式将所有传入的旧index1.php请求重定向到较新的 URL,即 SEO 友好的 URL,以便搜索引擎将链接流行度转移到新的 URL。我相信我可能有一个无限循环重定向,这就是它不起作用的原因。

到目前为止我的代码:

Options +FollowSymLinks
RewriteEngine On
RewriteBase / 

## Redirect still valid old links to SEO friendly ones
RewriteRule ^/?index1\.php\?session=user$ /user [R=301]

## Catch the above and rewrite the URL 
RewriteRule ^/?user/?$ /index1.php?session=user [QSA,L]

解析htaccess文件时,上述规则永远不会受到影响。

我突然想到我可能会在这里进行某种重定向循环,所以我考虑将index1.php文件重命名为index2.php并创建类似的内容:

## Redirect still valid old links to SEO friendly ones
RewriteRule ^/?index1\.php\?session=user$ /user [R=301]

## Catch the above and rewrite the URL 
RewriteRule ^/?user/?$ /index2.php?session=user [QSA,L]

然而,那也失败了。

最好的方法是什么?我在这里做错了什么?

谢谢!

4

2 回答 2

1

将您的.htaccess规则更新为

Options +FollowSymLinks
RewriteEngine On
RewriteBase / 

## Redirect still valid old links to SEO friendly ones
RewriteCond %{QUERY_STRING} !no-redir [NC]
RewriteCond %{QUERY_STRING} session=user [NC]
RewriteRule ^/?index1\.php$ /user? [R=301,NC,L]

## Catch the above and rewrite the URL 
RewriteRule ^/?user/?$ /index1.php?session=user&no-redir [QSA,NC,L]
于 2013-08-21T05:26:41.477 回答
0

您无法匹配?重写规则中的查询字符串( 之后的所有内容),因此您无法匹配该session=部分。您也不能简单地与%{QUERY_STRING}var 匹配,因为当它将 SEO 友好 URL 重写为带有查询字符串的 URL 时,它会被您的其他规则填充。所以你需要匹配实际的请求:

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /index1\.php\?session=([^&]+)&?([^\ ]*)
RewriteRule ^ /%2?%3 [L,R=301]
于 2013-08-20T15:19:18.300 回答