最近我重新设计了我的网站,让我们说http://www.sitename.com/。
在重新设计之前,主页网址是这样的:http://www.sitename.com/default.asp?id=1&lg=1
旧页面也有奇怪的查询字符串,它们不再相关,因此,我想将以default.asp开头的所有内容重定向到主页。
if(quantity >= 10 && quantity <=19)
替代地
RewriteRule default\.asp.* \
这是我到目前为止最接近的,但我很确定它错了。 你能帮忙吗?
更新:这是我的整个.htaccess:
RewriteCond %{QUERY_STRING} ^default.asp?id=1&lg=1$ [NC]
RewriteRule http://www.sitename.com/ http://www.sitename.com/? [R=301,L]
我试过把我的规则放在顶部和底部,(没有运气)。我应该以某种方式将其嵌入到另一条规则中吗?
答案 0 :(得分:1)
基于this网站,如果您设置这样的规则
RewriteRule default\.asp.* /?
它应该有用。
以下是如何在重写中替换查询字符串的参考:
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule
修改查询字符串
默认情况下,查询字符串不会更改。您可以, 但是,在包含查询的替换字符串中创建URL 字符串部分。只需在替换字符串中使用问号 表示应将以下文本重新注入 请求参数。 如果要删除现有查询字符串,请结束 替换字符串只有一个问号。结合新旧 查询字符串,使用[QSA]标志。
<强>更新强>
根据您的评论,试试这个:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule default\.asp.*$ /? [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
请注意[L]
末尾的RewriteRule default\.asp.*$ /? [L]
,它会在找到匹配项后终止重写过程。见L flag
如果您不包含L标志,则该过程将继续执行.htaccess
中的其余规则,直到它到达最后没有匹配或直到它与L标志匹配为止。可以把它想象成switch语句,在每种情况下都需要break
,否则它会继续下一个案例,如果它对你有帮助的话。
答案 1 :(得分:1)
您可以使用以下规则:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# redirect /default.asp to landing page
RewriteRule default\.asp$ /? [L,NC,R=301]
RewriteRule ^index\.php$ - [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
# END WordPress
答案 2 :(得分:0)
default.asp 是您需要使用%{REQUEST_URI}变量与其匹配的文件名。它不是查询字符串的一部分。要重定向包含 default.asp 的请求URI,您可以使用以下内容:
RewriteCond %{REQUEST_URI} /default\.asp [NC]
RewriteRule ^ http://sitename.com/? [R,L]