如何通过.htaccess为网站所有URL末尾添加?1?
给网站所有URL末尾添加?1的.htaccess实现方案
要给所有不带查询字符串的URL加上?1来绕过缓存,你可以在现有的.htaccess规则中插入重定向规则,位置很关键——必须放在WWW和HTTPS的强制重定向之后,避免出现多重跳转问题。
具体规则添加方式
直接在HTTPS重定向的规则后面插入以下代码:
# 给无查询字符串的URL添加?1 RewriteCond %{QUERY_STRING} ^$ RewriteRule ^(.*)$ /$1?1 [R=302,L]
R=302是临时重定向,先用来测试效果,确认没问题再改成R=301永久重定向,这样后续取消规则时不会残留浏览器缓存。- 如果不想给静态文件(图片、CSS、JS这类)加这个后缀,可以加个过滤条件,把上面的规则换成:
后缀列表可以根据你的网站实际资源类型调整。# 排除静态文件,仅给页面URL加?1 RewriteCond %{REQUEST_URI} !\.(png|jpg|jpeg|gif|css|js|ico)$ [NC] RewriteCond %{QUERY_STRING} ^$ RewriteRule ^(.*)$ /$1?1 [R=302,L]
修改后的完整.htaccess代码
<IfModule LiteSpeed> CacheEngine off LiteMage off </IfModule> Options -Indexes DirectoryIndex index.php <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # 新增:给无查询字符串的URL添加?1 RewriteCond %{QUERY_STRING} ^$ RewriteRule ^(.*)$ /$1?1 [R=302,L] # 可选:若需排除静态文件,替换上面的规则为以下内容 # RewriteCond %{REQUEST_URI} !\.(png|jpg|jpeg|gif|css|js|ico)$ [NC] # RewriteCond %{QUERY_STRING} ^$ # RewriteRule ^(.*)$ /$1?1 [R=302,L] RewriteRule ^(files)($|/) - [L] RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ index.php?qa-rewrite=$0&%{QUERY_STRING} [L] </IfModule>
关键说明
- 这条规则只会对没有查询字符串的URL生效,如果URL本身已经带有
?xxx,不会重复添加?1。 - 放在WWW/HTTPS重定向之后,是为了先把URL标准化成
https://www.xxx.com的格式,再统一添加查询字符串,避免出现多次重定向。
内容的提问来源于stack exchange,提问作者CrazyJack
相关产品推荐
相关产品推荐

