我为自己的网站写了一个小型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个参数?
答案 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
中缩短线条的方法