所以,我只是设法为我之前开发的一个自定义网站写了一些RewriteCond
和RewriteRule
,因为我是所有这一切的初学者,我跳得有人会检查我的代码并告诉我是否有任何改进或是否有好处。
我想要实现的目标是将/?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]
那么,一切都好吗?或者,还有改进的余地吗?
答案 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]