1

我一直在尝试解决这个问题 3 天,但找不到答案,所以我希望有人能够对此有所了解。

我希望使用 .htaccess 将 URL 动态重写为永久 301 重定向以用于 SEO 目的。我希望更改以下内容:

OLD URL EXAMPLE: http://example.co.uk/blog/?tag=facebook/page/5/
OLD URL EXAMPLE: http://example.co.uk/blog/?tag=twitter/page/2/
OLD URL EXAMPLE: http://example.co.uk/blog/?tag=google/page/12/

NEW URL: http://example.co.uk/blog/?tag=facebook&paged=5
NEW URL: http://example.co.uk/blog/?tag=twitter&paged=2
NEW URL: http://example.co.uk/blog/?tag=google&paged=12

我需要能够为传入的每个 url 请求重新使用两个动态属性,例如标签('facebook')和分页号('5'),因为每个请求可能会有所不同。

这样做的原因是因为我们正在尝试从我们的旧 wordpress 博客中解决 404 错误,该博客没有使用分页,只是“下一个”和“上一个”,显示为“/page/5”。新博客使用显示为“&paged=5”的分页。

这是我尝试过的一个例子。

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/blog/$
RewriteCond %{QUERY_STRING} ^tag=([a-z]+)/page/([0-9])$
RewriteRule ^(.*)$ http://example.co.uk/blog/?tag=%1&paged=%2 [R,L]

PHP 作为 CGI 运行,并且无法更改为 apache,导致整个站点出现许多权限问题。

我尝试了多种 RewriteRules、RewriteConds 和 %{QUERY_STRING} 请求的组合,但仍然没有任何乐趣。对此的任何帮助将不胜感激!

4

2 回答 2

1

这应该有效:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} ^tag=([^/]+)/page/([^/]+)/?$ [NC]
RewriteRule ^(blog)/?$ /$1/?tag=%1&paged=%2 [R=302,L,NC]

确认它工作正常后,替换R=302R=301. R=301在测试你的 mod_rewrite 规则时避免使用(永久重定向)。

于 2013-05-14T11:13:11.570 回答
0

感谢您的帮助,我们尝试了您的两种方法,但没有奏效。最终,经过更多的试验和错误,我们设法做到了。这就是最终为我们工作的东西。

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/blog/$
RewriteCond %{QUERY_STRING} ^tag=([a-z]+)/page/([0-9]+)/$
RewriteRule ^(.*)$ http://example.co.uk/blog/?tag=%1&paged=%2 [R,L]

注意:这只是一些似乎适用于 Apache PHP 设置但需要针对 CGI PHP 设置进行调整的语法错误。

我们还通过将 'tag' 更改为 'cat' 并将 cat 的正则表达式从字母更改为数字来重新使用此 htaccess 代码来解释类别:

RewriteCond %{REQUEST_URI}  ^/blog/$
RewriteCond %{QUERY_STRING} ^cat=([0-9]+)/page/([0-9]+)/$
RewriteRule ^(.*)$ http://example.co.uk/blog/?cat=%1&paged=%2 [R,L]

再次感谢。

希望这可以帮助将来遇到同样问题的人。

现在到其他人!:)

于 2013-05-14T13:48:32.077 回答