Apache 隐藏所有php扩展并获取变量(如果存在)
我想隐藏URL中的所有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
.php
扩展,如果有GET变量,我也需要隐藏它们
例:
至www.mysite.com/panel/employees.php
www.mysite.com/panel/employees
towww.mysite.com/panel/employees.php?c=1
www.mysite.com/panel/employees/1
towww.mysite.com/adm/tables.php
www.mysite.com/adm/tables
towww.mysite.com/adm/tables.php?c=3
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]