站点全局htaccess重写规则


Site global htaccess rewrite rule

我有一个网站(php),里面有一堆文件,例如directory.phpprofile.php等。

在每个页面上都有一些操作,这意味着我必须使用get变量,例如:

- directory.php?action=seed&ref1=abc&ref2=123
- profile.php?action=list&ref1=abc
- profile.php?action=full

有没有可能在htaccess中有一个重写规则,我可以使用所有这些链接,例如:

- directory/seed/abc/123
- profile/list/abc
- profile/full

而不必为每个单独的文件编写规则?

我使用过以下规则:

RewriteRule ^profile/(.*)/(.*) /profile.php?action=$1&ref=$2 [QSA,NC,L]

之前,但不确定是否有办法对所有文件使用这一规则,而不是对每个文件重复该规则。

感谢

我不认为你可以有一个适用于所有人的规则,但为什么不使用MVC结构,并有一个控制器来管理你的所有请求和操作,视图将管理你的链接和呈现。。。有关更多信息,请查看以下内容:http://www.onextrapixel.com/2012/03/14/a-detailed-overview-of-the-model-view-controller-mvc-coding-structure/

对于不同数量的参数,您需要不同的规则,除非您可以为它们设置空值:

RewriteEngine On
Options -Multiviews
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /$1.php?action=$2&ref1=$3&ref2=$4 [L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /$1.php?action=$2&ref1=$3 [L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/]+)/([^/]+)/?$ /$1.php?action=$2 [L]

或者,如果你不在乎空白参数,你可以只使用一条规则:

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/]+)/([^/]+)(?:/([^/]+)|)(?:/([^/]+)|)/?$ /$1.php?action=$2&ref1=$3&ref2=$4 [L]