我有一个包含大量文件的网站(php),例如directory.php
,profile.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]
之前,但不确定是否有办法对所有文件使用此规则,而不是复制每个文件的规则。
由于
答案 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]