站点全局htaccess重写规则

时间:2013-12-04 10:03:04

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

我有一个包含大量文件的网站(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]

之前,但不确定是否有办法对所有文件使用此规则,而不是复制每个文件的规则。

由于

2 个答案:

答案 0 :(得分:1)

我认为你不能为所有人制定一条规则,但为什么不使用MVC结构并拥有一个管理所有请求和操作的控制器,视图将管理你的链接和渲染...更多信息信息看看这个:http://www.onextrapixel.com/2012/03/14/a-detailed-overview-of-the-model-view-controller-mvc-coding-structure/

答案 1 :(得分:1)

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

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]