.htaccess 我可以让我的htaccess更干净、更光化吗?

.htaccess 我可以让我的htaccess更干净、更光化吗?,.htaccess,.htaccess,这是我的.htaccess,它感觉像是走了很长的路,而且它可以变得更高效。我目前面临的问题是,由于这些规则在“纵断面图”和“vcard视图”的重写中的顺序,目前无法工作。我发现,根据我把这些规则放在什么顺序上,它会影响其他人的行为。如果你问我,这有点像一场噩梦 我的网站结构并不复杂。我有3个PHP页面,每个页面使用$\u GET值处理项目的不同操作,以检查人员是否在正确的位置,并使用正确的参数。我遇到的一个问题是制作友好链接,这样人们就可以使用熟悉的url路径访问图像或其他内容 好了,就是这样,

这是我的.htaccess,它感觉像是走了很长的路,而且它可以变得更高效。我目前面临的问题是,由于这些规则在“纵断面图”和“vcard视图”的重写中的顺序,目前无法工作。我发现,根据我把这些规则放在什么顺序上,它会影响其他人的行为。如果你问我,这有点像一场噩梦

我的网站结构并不复杂。我有3个PHP页面,每个页面使用$\u GET值处理项目的不同操作,以检查人员是否在正确的位置,并使用正确的参数。我遇到的一个问题是制作友好链接,这样人们就可以使用熟悉的url路径访问图像或其他内容

好了,就是这样,哦,是的。我还有一个动态重写规则模板,当我想使用一个选项或设置时,我可以使用最后两个占位符来放入我的数据

# 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]

由于每个结果URL只有一条规则,我认为在不改变应用程序URL结构的情况下,您无法简化这个过程,或者说不显著简化。您的regexp很简单,而且据我所知,足够可靠

但是,是的,这种结构是脆弱的,并且依赖于秩序:

  • 由两部分组成的URL可以引用帐户 查看或转到vcard视图。这需要 将帐户视图规则置于 vCard视图规则和避免 有一个叫做“vcard”的用户
  • 由五部分组成的URL可以是常规URL 链接或动态页面设置--所以 避免交换这两个规则或使用类型“library”和 用户“模板”
我不太担心效率/性能:在我的一个项目中,我们使用了类似的设置,308 RewriteRule和307 RewriteCond(仅计算它们)。与您有同样的担忧,我曾经通过运行随机URL与转换URL的负载测试来衡量其性能,性能差异非常小,在PHP和数据库处理的背景下根本无法衡量



注意:事实上,我有类似的经验(我不得不说惊人的相似),不应该被解释为我支持它。无法轻松记录和解释的URL结构是一场噩梦,如果可能的话应该避免。

thx,我是通过自学完成的,因此我对专业起草的htaccess没有真正的看法。事实上,你给了我2分。我会研究一下,看看哪里可以解决订单问题。谢谢