我对URL重写很新。我想要实现的是有两条主要规则:
domain.com/p.php?id=1
重写为domain.com/p/1
这是我到目前为止所拥有的:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^p/(.+)$ p.php?id=$1 [L]
这似乎最初起作用:所有.php扩展名都被隐藏,输入domain.com/p/1显示domain.com/p.php?id=1。
但是,我刚刚意识到此页面上的PHP GET方法选择了错误的值:虽然我希望它选择1
,但它实际上会选择1.php/1
。起初我没有注意到它,因为基于$_GET
的数据库查询实际上有效,这对我来说似乎很奇怪,因为我知道这个值是错误的。
我怎样才能使这两个重写规则的组合按预期工作?
谢谢!
答案 0 :(得分:1)
将此代码放在DOCUMENT_ROOT/.htaccess
文件中:
RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+p\.php\?id=([0-9]+) [NC]
RewriteRule ^ /p/%1? [R=301,L]
RewriteRule ^p/([0-9]+)/?$ /p.php?id=$1 [L,QSA,NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]
答案 1 :(得分:0)
如果您只想重写数值,则应限制第二条规则:
RewriteRule ^p/(\d+)$ p.php?id=$1 [L]