Apache重写规则:动态读取参数

时间:2015-03-30 11:15:34

标签: apache .htaccess mod-rewrite

我为自己的网站写了一个小型CMS。 我的.htaccess中有以下规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ /index.php?module=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)$ /index.php?module=$1&controller=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?module=$1&controller=$2&action=$3 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /index.php?module=$1&controller=$2&action=$3&arg1=$4 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /index.php?module=$1&controller=$2&action=$3&arg1=$4&arg2=$5 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/(.*)$ /index.php?module=$1&controller=$2&action=$3&arg1=$4&arg2=$5&arg3=$6 [L]

我需要阅读6个GET参数。 我的代码对我来说看起来很冗余,但我不知道我能做些什么来缩短代码。 有人提示如何用较少的行读出这6个参数?

1 个答案:

答案 0 :(得分:0)

线条的数量实际上不会伤害任何东西,因为在文本数量方面什么都不是。 .htaccess文件必须非常大才能产生明显的性能问题。

你编写代码的方式实际上并没有太多可以减少行数,因为你需要匹配可能出现的所有URI。这就是为什么包括wordpress在内的许多CMS都将所有内容路由到PHP index.php然后在那里处理它。

例如,您可以执行此规则来路由所有请求

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

然后使用$_SERVER["REQUEST_URI"]在PHP中获取URI并在/上展开,以此方式获取您的页面或操作,或者您想要处理它。

是你在.htaccess

中缩短线条的方法