RewriteRules的可能改进

时间:2012-09-18 19:33:19

标签: .htaccess mod-rewrite url-rewriting

所以,我只是设法为我之前开发的一个自定义网站写了一些RewriteCondRewriteRule,因为我是所有这一切的初学者,我跳得有人会检查我的代码并告诉我是否有任何改进或是否有好处。

我想要实现的目标是将/?mod=x转换为/x,将/?mod=x&type=y-z转换为/x/y-z

这就是我现在所做的事情:

# Removes trailing slashes (prevents SEO duplicate content issues)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]

RewriteCond %{REQUEST_URI} /([a-z]+)/([a-z\-]+)$ [NC]
RewriteRule ^([^/]*)/([^/]*)$ /?mod=$1&tipo=$2 [NC,L]

RewriteCond %{REQUEST_URI} /([a-z]+)/?$ [NC]
RewriteRule ^([^/]*)$ /?mod=$1 [NC,L]

那么,一切都好吗?或者,还有改进的余地吗?

1 个答案:

答案 0 :(得分:1)

您可以合并这些行并移除RewriteCond

RewriteCond %{REQUEST_URI} /([a-z]+)/([a-z\-]+)$ [NC]
RewriteRule ^([^/]*)/([^/]*)$ /?mod=$1&tipo=$2 [NC,L]

RewriteCond %{REQUEST_URI} /([a-z]+)/?$ [NC]
RewriteRule ^([^/]*)$ /?mod=$1 [NC,L]

要:

RewriteRule ^([a-z]+)/([a-z\-]+)$ /?mod=$1&tipo=$2 [NC,L]

RewriteRule ^([a-z]+)$ /?mod=$1 [NC,L]

否则,这看起来很好。


  

我正在尝试添加最后一项改进(关于htaccess),这就是我希望它将/?mod = inicio重定向到/ inicio。所以我试着用下面的代码来做,但它一直在构建这样的/ inicio网址?mod = inicio

此规则与您的其他规则直接冲突。它们将相互重写,因为一个规则的目标是另一个规则的正则表达式匹配。此外,您需要在目标末尾添加?以删除实际的查询字符串。您需要匹配实际请求:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?mod=([a-z]+)
RewriteRule ^ /%1? [L]