隐藏所有php扩展和GET变量(如果存在)

时间:2017-08-07 05:20:13

标签: apache .htaccess mod-rewrite url-rewriting

我想隐藏URL中的所有.php个扩展名,如果有GET变量,我也需要隐藏它们。

例:

  • www.mysite.com/panel/employees.phpwww.mysite.com/panel/employees
  • www.mysite.com/panel/employees.php?c=1www.mysite.com/panel/employees/1
  • www.mysite.com/adm/tables.phpwww.mysite.com/adm/tables
  • www.mysite.com/adm/tables.php?c=3www.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=1www.mysite.com/panel/employees?c=1)。

我尝试对上面的代码进行更改,但是,因为我是.htaccess的新手,所以我没有成功。所以如果有人能帮我解释怎么做,我将非常感激。

1 个答案:

答案 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]