我可以让我的htaccess更干净,更优化吗?

时间:2011-03-25 00:24:28

标签: .htaccess

这是我的.htaccess感觉就像它的长路一样,它可以变得更有效率。我目前遇到的问题是,由于这些规则在重写配置文件视图和vcard视图中的顺序目前不起作用。我发现根据我放置这些RewriteRules的顺序,它会影响其他人的行为方式。如果你问我,那就是一场噩梦。

我的网站结构并不复杂。我有3个PHP页面,每个页面使用$ _GET值处理我的项目的不同操作,以使用正确的参数检查该人员是否在正确的位置。我遇到的一个问题是建立友好链接,以便人们可以使用熟悉的URL路径来查看图像或其他内容。

好吧,好吧,哦,你。我还有一个动态RewriteRule模板,当我想使用一个选项或设置时,我可以使用最后两个占位符来输入我的数据。

# Options:
# -MultiViews: Turns off multiviews so it doesn't interfer with our rewrite rules
# -Indexes: Stop directory listings
# +FollowSymlinks: Let out rewrite rules work
Options -MultiViews -Indexes +FollowSymlinks
RewriteEngine On
RewriteBase /

# Error page
# Force add trainling slash
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ http://foo.bar/$1/ [R=301,L]

# Prepent www if not exist in URI
RewriteCond %{HTTP_HOST} ^foo\.bar$
RewriteRule (.*) http://www.foo.bar/$1 [R=301,L]

# If path is not a directory or file then apply RewriteRule
RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
RewriteCond %{REQUEST_FILENAME} -d [NC,OR]
RewriteCond %{REQUEST_FILENAME} -l [NC]
RewriteRule .* - [L]

# Rewrite for page view
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ account.php?type=$1&user=$2&page=$3 [QSA,L]

# Condition to ignore regular links
RewriteRule ^library/templates/([^/]+)/([^/]+)/([^/]+)/?$ library/templates/$1/$2/$3 [QSA,L]

# Rewrite for dynamic page settings
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ account.php?type=$1&user=$2&page=$3&$4=$5 [QSA,L]

# Rewrite for account view
RewriteRule ^([^/]+)/([^/]+)/?$ account.php?type=$1&user=$2 [QSA,L]

# Rewrite for site default resources location
RewriteRule ^([^/]+)/([^/]+)/theme/s/([^/]+)/([^/]+)/([^/]+)/?$ library/themes/site/$3/$4/$5 [QSA,L]

# Rewrite for profile view
RewriteRule ^([^/]+)/?$ profile.php?user=$1 [NC,L]

# Rewrite for vCard view
RewriteRule ^([^/]+)/vcard/?$ vcard.php?user=$1 [NC,L]


# Rewrite for user themes location
#RewriteRule ^([^/]+)/([^/]+)/theme/([^/]+)?$ library/themes/users/$3 [NC,L]

#error codes
#RewriteRule ^error/([^/]+)/?$ error.php?code=$1 [NC,L]

1 个答案:

答案 0 :(得分:2)

由于每个结果网址只有一个规则,因此我认为您不能简化此操作(或不显着),而不会更改应用的网址结构。你的regexps很简单,据我所知,足够坚固。

但是,结构是脆弱的,依赖于顺序:

  • 两部分网址可以引用帐户 查看或vcard视图。这需要 之后放置帐户视图规则 vCard视图规则和避免永远 有一个名为“vcard”的用户。
  • 五部分网址可以是常规的 链接或动态页面设置 - 所以 避免交换这两个规则或者有一个类型“library”和a 用户“模板”。

我不担心效率/性能:在我的一个项目中,我们使用308 RewriteRule和307 RewriteCond(只计算它们)的类似设置。有了同样的担心,我曾经通过使用随机URL和转换后的URL运行负载测试来测量其性能,并且性能差异非常小,以至于在PHP& amp;背景下它根本无法测量。数据库处理。


注意:我有类似经历的事实(我必须说非常相似)不应该被解释为我支持它。无法记录和解释的URL结构是一场噩梦,应尽可能避免。