2013-02-27 55 views
2

我有下面的代码工作正常国防部重写htaccess的与寻呼系统

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] 
+0

散列是一个URL片段,它从来没有发送到服务器,因此它不应该出现在'%{} THE_REQUEST'变量。该片段完全在浏览器的末端处理。 – 2013-02-27 07:24:34

+0

感谢您的信息。那么是否有解决方案或我必须更改分页系统? – Neos 2013-02-27 07:28:01

回答

1

感谢您的信息。那么是否有解决方案或我必须更改分页系统?

是的。

你有两组重写规则,这些规则可以协同工作。第一条规则需要一个漂亮的URL,没有任何查询字符串,并在内部将其重写为一个PHP脚本。第二条规则使用看起来丑陋的php脚本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]