1

所以,我只是设法为我不久前开发的一个自定义网站编写了一些内容RewriteCondRewriteRule由于我是这一切的初学者,我希望有人会审查我的代码并告诉我是否有任何需要改进的地方它本来就很好。

我想要实现的是从/?mod=xto/x和 from /?mod=x&type=y-zto转换/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]

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

4

1 回答 1

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 构建 url

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

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?mod=([a-z]+)
RewriteRule ^ /%1? [L]
于 2012-09-18T20:34:36.860 回答