带有变量的.htaccess URL结构停止工作w / pagination

时间:2014-08-20 18:33:00

标签: .htaccess url-rewriting pagination rewrite

我在这2页中的一页上遇到htaccess问题: index.php & search.php

两个页面都是功能性的&依赖于通过“GET”方法发送给它们的变量。


搜寻示例 -

search.php?tag=KEYPHRASE

显示为: site.com/tag/KEYPHRASE

# HTACCESS:
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^tag/(.*)/?$ /search.php?tag=$1 [NC,L]

# internal forward
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^tag/(.+?)/?$ /search.php?tag=$1 [L,QSA,NC]

# external rewrite
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+search\.php\?tag=([^\s]+) [NC]
RewriteRule ^ /tag/%1? [R=302,L]

INDEX示例 -

index.php?id=ID&title=TITLE

显示为: site.com/cover/TITLE-ID

# HTACCESS:  
RewriteRule ^cover/(.*)-(.*)/?$ index.php?id=$2&title=$1 [NC,L]

# internal forward FOR SINGLE PAGE (index)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^cover/(.+?)-(.+?)/?$ /index.php?id=$2&title=$1 [L,QSA,NC]

# external rewrite
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?id=([^\s]+)&title=([^\s]+) [NC]
RewriteRule ^ /cover/%2-%1? [R=302,L]

这两个页​​面也有分页,我的问题是,它只适用于 search.php

搜索页面 w /分页:
site.com/tag/KEYPHRASE&page=# 工作!修正返回的分页结果。

INDEX页面 w /分页:
site.com/title&page=#-ID 在标题和&之间插入&page=#网址中的ID,但会显示结果。


我在这两者之间看到的唯一区别是传递的变量数量,否则它们将被重写完全相同。

我需要帮助,使我的.htaccess结构无缝地与我的 index.php 页面网址的分页查询字符串一起工作。

1 个答案:

答案 0 :(得分:2)

您需要在内部重写规则中使用QSA标记并重新排列规则。

保持你的.htaccess像这样:

RewriteEngine On

# external rewrite
RewriteCond %{THE_REQUEST} \s/+index\.php\?id=([^&\s]+)&title=([^&\s]+)&page=([^&\s]+) [NC]
RewriteRule ^ /cover/%2-%1/%3? [R=302,L]

RewriteCond %{THE_REQUEST} \s/+index\.php\?id=([^&\s]+)&title=([^&\s]+)\s [NC]
RewriteRule ^ /cover/%2-%1? [R=302,L]

# external rewrite
RewriteCond %{THE_REQUEST} \s/+search\.php\?tag=([^&\s]+)&page=([^&\s]+) [NC]
RewriteRule ^ /tag/%1/%2? [R=302,L]

RewriteCond %{THE_REQUEST} \s/+search\.php\?tag=([^&\s]+)\s [NC]
RewriteRule ^ /tag/%1? [R=302,L]

# internal forward FOR SINGLE PAGE (index)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^cover/([^-]+)-([^/]+)/([0-9]+)/?$ /index.php?id=$2&title=$1&page=$3 [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^cover/([^-]+)-([^/]+)/?$ /index.php?id=$2&title=$1 [L,QSA,NC]

# internal forward
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^tag/([^/]+)/?$ /search.php?tag=$1 [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^tag/([^/]+)/([0-9]+)/?$ /search.php?tag=$1&page=$2 [L,QSA,NC]