发布于2026-07-09 阅读(0)
扫一扫,手机访问
Apache服务器里配置伪静态,核心就是靠 .htaccess 文件和 mod_rewrite 这个模块。说实话,这活儿看着简单,但门道不少。不少人上来就写规则,结果遇到各种404或者无限重定向,最后还是得回头查日志。下面几个技巧,算是这些年攒下来的实战心得,希望能帮你少踩几个坑。

mod_rewrite 是不是活着别笑,这是最容易被忽视的一步。很多折腾了半天规则不生效的朋友,最后发现模块压根没开。去 Apache 的主配置文件(像 httpd.conf 或 apache2.conf)里找到这行,把前面的注释去掉就行:
LoadModule rewrite_module modules/mod_rewrite.so
.htaccess 里的常见玩法在网站根目录下放好 .htaccess 文件,然后就可以开始写规则了。这里举几个最典型的例子。
想让 /article/123 这种地址,实际去执行 article.php 并传入参数?很简单:
RewriteEngine On
RewriteRule ^article/([0-9]+)$ article.php?id=$1 [L]
关键在于正则表达式匹配数字,然后用 $1 把捕获到的值传过去。最后那个 [L] 表示这是最后一条规则,匹配到就不再往下走了。
有些业务场景下,URL里带问号显得不够“干净”。比如想把 /product/123?color=red&size=large 变成 /product/123-red-large:
RewriteEngine On
RewriteRule ^product/([0-9]+)-([a-z]+)-([a-z]+)$ product.php?id=$1&color=$2&size=$3 [L]
注意这里用连字符把参数拼在一起,方便又直观。
现在站点基本都要求全站SSL,这个规则几乎成了标配:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
先判断当前请求是不是HTTPS,如果不是,就用301永久重定向到HTTPS版本。R=301 对SEO很友好。
光有 RewriteRule 还不够,RewriteCond 能让你对特定条件进行过滤。比如只允许内网IP访问后台:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^123.456.789.0$
RewriteRule ^admin/.*$ - [F,L]
这里 [F] 直接返回403禁止访问,非常干脆。
有时候你重写URL时,原来的查询字符串也想保留下来(比如分页参数)。加上 [QSA] 标志就行:
RewriteEngine On
RewriteRule ^article/([0-9]+)$ article.php?id=$1 [QSA,L]
这样请求 /article/123?page=2 时,后端的 $_GET 里既有 id=123 又有 page=2。
这是最有效的排障手段。在Apache配置里加上:
LogLevel alert rewrite:trace3
然后重启Apache,去错误日志(一般位于 /var/log/apache2/error.log)里看详细的匹配过程。哪条规则被匹配、哪个条件没通过,一目了然。
.htaccess 文件的权限建议设为 644,否则Apache读不到。/a 重写到 /b,又把 /b 重写到 /a,服务器会直接崩溃。掌握这些技巧之后,Apache的伪静态配置基本上就能应付日常绝大多数场景了。不管是提升用户体验还是优化搜索引擎抓取,都能事半功倍。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8