我想隐藏URL中的所有.php
个扩展名,如果有GET变量,我也需要隐藏它们。
例:
www.mysite.com/panel/employees.php
至www.mysite.com/panel/employees
www.mysite.com/panel/employees.php?c=1
至www.mysite.com/panel/employees/1
www.mysite.com/adm/tables.php
至www.mysite.com/adm/tables
www.mysite.com/adm/tables.php?c=3
至www.mysite.com/adm/tables/3
所以我想出了以下代码(进行了一些研究)
RewriteEngine On
RewriteRule ^(.+)\.php$ /$1 [R,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [NC,END]
它工作正常但是,它只隐藏了扩展名而不是变量(例如:www.mysite.com/panel/employees.php?c=1
到www.mysite.com/panel/employees?c=1
)。
我尝试对上面的代码进行更改,但是,因为我是.htaccess
的新手,所以我没有成功。所以如果有人能帮我解释怎么做,我将非常感激。
答案 0 :(得分:1)
您需要一组额外的规则来处理查询参数:
RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+([^.]+)\.php\?c=([^\s&]+) [NC]
RewriteRule ^ /%1/%2? [R=301,L,NE]
RewriteRule ^(.+)\.php$ /$1 [R=301,NC,L]
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ /$1.php [END]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+)/([\w-]+)/?$ $1.php?c=$2 [END,QSA]