我想实现以下
示例:
mydomain.com/new -->index.php?pg=new
mydomain.com/purchased -->index.php?pg=purchased
mydomain.com/login -->index.php?pg=login
示例:
mydomain.com/new/12 -->index.php?pg=new&id=12
mydomain.com/purchased/240 -->index.php?pg=purchased&id=240
mydomain.com/login/10 -->index.php?pg=login&id=10
我使用了以下htaccess代码。 第一个正常工作。 关于第二个,整个参数传递给pg,根本没有参数id。
就是网址 mydomain.com/purchased/240 在我的PHP $ _Get只有' pg'参数和' id'参数完全没有 和pg = / purchase / 240
请建议正确的方法。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?pg=$1 [NC,QSA]
RewriteRule ^([^/]+)/(\d+)/.*$ /index.php?pg=$1&id=$2 [NC,QSA]
由于
编辑:如果有人需要,可以提供正确的解决方案
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9-]+)/([0-9]+) /index.php?pg=$1&id=$2 [NC,L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?pg=$1 [NC,QSA]
答案 0 :(得分:0)
这是因为全能模式。 (。*)匹配所有内容并将其重写为目标。对于您的示例,您的第一条规则与两个请求匹配, / foobar / 和 / foobar / 123 被重写为 /index.php?pg=request 。要解决此问题,您需要修复规则的顺序,您需要将特定规则放在全能规则之前:
RewriteRule ^([^/]+)/(\d+)/?$ /index.php?pg=$1&id=$2 [L]
RewriteRule ((?!index.php).+) /index.php?pg=$1 [L]