Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 隐藏所有php扩展并获取变量(如果存在)_Apache_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Apache 隐藏所有php扩展并获取变量(如果存在)

Apache 隐藏所有php扩展并获取变量(如果存在),apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,我想隐藏URL中的所有.php扩展,如果有GET变量,我也需要隐藏它们 例: www.mysite.com/panel/employees.php至www.mysite.com/panel/employees www.mysite.com/panel/employees.php?c=1towww.mysite.com/panel/employees/1 www.mysite.com/adm/tables.phptowww.mysite.com/adm/tables www.mysite.com

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

例:

  • www.mysite.com/panel/employees.php
    www.mysite.com/panel/employees
  • www.mysite.com/panel/employees.php?c=1
    to
    www.mysite.com/panel/employees/1
  • www.mysite.com/adm/tables.php
    to
    www.mysite.com/adm/tables
  • www.mysite.com/adm/tables.php?c=3
    to
    www.mysite.com/adm/tables/3
  • 更多的URL也有同样的想法
因此,我提出了以下代码(经过一些研究)

它工作正常,但是,它只隐藏扩展名而不隐藏变量(例如:
www.mysite.com/panel/employees.php?c=1
www.mysite.com/panel/employees?c=1


我试图对上面的代码进行更改,但是,由于我是
.htaccess
新手,所以没有成功。因此,如果有人能帮我解释如何操作,我将不胜感激。

您需要一组额外的规则来处理查询参数:

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]

如果我访问
www.mysite.com/employees.php?c=1
(重写为
employees/1
),如果我访问
www.mysite.com/employees.php
重写为
employees
,工作就可以了,但是我有一个404错误(当GET var不存在时)所有没有GET变量,比如
www.mysite.com/employees.php
www.mysite.com/tables.php
等。扩展名被删除,但返回404错误。因此在浏览器中直接输入
www.mysite.com/employees
也会得到404?顺便说一句,问题中的规则没有改变是的,不幸的是,当访问URL时返回错误404,而不带变量。两个都在根目录下。如果我删除
.htaccess
所有功能都能正常工作(但显然是使用扩展和GET vars)-“如果您回滚我建议的规则,只保留有问题的代码并输入…”,是的,它可以工作!
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]