【发布时间】:2015-07-30 04:23:37
【问题描述】:
重写以下3个网址
http://example.com/index.php?page=search
至
http://example.com/search
http://example.com/index.php?page=profile&value=myname
至
http://example.com/myname
http://example.com/index.php?page=stats&type=daily
至
http://example.com/stats/daily
当前的 .htaccess 是这样写的:
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} /index\.php\?page=([^\s&]+)&value=([^\s&]+) [NC]
RewriteRule ^ index/%1/%2? [R=302,L,NE]
RewriteCond %{THE_REQUEST} /index\.php\?page=([^\s&]+)&type=([^\s&]+) [NC]
RewriteRule ^ index/%1/%2? [R=302,L,NE]
RewriteCond %{THE_REQUEST} /index\.php\?page=([^\s&]+) [NC]
RewriteRule ^ index/%1/? [R=302,L,NE]
RewriteRule ^index/([^/]+)/([^/]+)/?$ /index.php?page=$1&value=$2 [NC,L,QSA]
RewriteRule ^index/([^/]+)/([^/]+)/?$ /index.php?page=$1&type=$2 [NC,L,QSA]
RewriteRule ^index/([^/]+)/?$ /index.php?page=$1 [NC,L,QSA]
我需要从第一个和第三个 URL 中删除 /index/,并从第二个 URL 中删除 /index/profile/。
欢迎所有的 cmets 和建议。
【问题讨论】:
-
您当前的 .htaccess 规则存在问题,因为您将
page=X&value=Y和page=X&type=Y都重定向到同一个 URL,即。/index/X/Y- 这意味着你不能重写这个。您的两个RewriteRules 具有相同的模式,因此第二个永远不会匹配。它总是会重写回page=X&value=Y(type丢失)。
标签: php .htaccess url-rewriting rewrite url-routing