2

我有以下代码可以正常工作

RewriteRule ^articles/([^/\.]+)/?$ articles.php?pid=$1 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+articles\.php\?pid=([^\s&]+) [NC]
RewriteRule ^ http://www.mydomain.com/articles/%1? [R=301,L]

问题是我有一个分页系统,我为我的分页系统向该页面发送了另一个变量,看起来像这样

&pageNum_getArticles=1#1

我已经尝试过执行以下操作,但对我认为的哈希感到困惑

RewriteRule ^articles/([^/\.]+)/?$ articles.php?pid=$1&pageNum_getArticles=$2 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+articles\.php\?pid=([^\s&]+)&pageNum_getArticles=([^\s&]+) [NC]
RewriteRule ^ http://www.mydomain.com/articles/%1/%2? [R=301,L]
4

1 回答 1

1

谢谢(你的)信息。那么是否有解决方案或者我必须更改寻呼系统?

是的。

您有 2 组可以协同工作的重写规则。第一条规则采用没有任何查询字符串的漂亮 URL,并在内部将其重写为 php 脚本。第二条规则采用丑陋的 php 脚本 URI 并将浏览器重定向到使用更好看的 URI。第一组是正确的。但是第二组使用相同的规则来路由到脚本。您需要为分页创建另一个分组,因为$2不会反向引用任何匹配项。

尝试:

# second match here---------------v
RewriteRule ^articles/([^/.]+)/([^/.]+)/?$ articles.php?pid=$1&pageNum_getArticles=$2 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+articles\.php\?pid=([^\s&]+)&pageNum_getArticles=([^\s&]+) [NC]
RewriteRule ^ http://www.mydomain.com/articles/%1/%2? [R=301,L]

请注意,如果您仍然想使用不使用分页的规则,则需要在有分页的规则之后有非分页规则。

此外,如果由于某种原因您的分页在没有 URL 片段的情况下无法工作,并且如果该片段总是与分页号码相同,您可以将其添加到重定向的末尾。但是你需要一个像faa建议的NE:

RewriteRule ^ http://www.mydomain.com/articles/%1/%2#%2? [R=301,L,NE]
于 2013-02-27T07:31:57.827 回答