怎样在Apache2中实现URL重写
在Apache2中实现URL重写,需先激活mod_rewrite模块并重启服务。在目标目录创建.htaccess文件,设置RewriteEngineOn后编写规则,例如用[R=301,L]实现永久重定向,或用正则匹配动态参数。若规则不生效,需检查主配置文件是否允许AllowOverrideAll。
在Apache2中搞定URL重写,其实核心就是玩转mod_rewrite这个模块。很多新手一上来就被规则吓到,但拆开来看,步骤非常清晰。

先别急着写规则,第一步得确认模块有没有“醒着”。运行这条命令把mod_rewrite模块激活:
sudo a2enmod rewrite
然后记得让Apache2重启一下,才能让改动生效:
sudo systemctl restart apache2
接下来,你得找到目标目录——就是你想应用URL重写规则的那个文件夹。在里边创建一个叫.htaccess的文件(如果已经存在就直接编辑它)。这个文件就是Apache的“规则口袋”,所有重写逻辑都放在里面。
打开.htaccess文件,写入类似下面的内容,这会是一个最基本的永久重定向:
RewriteEngine On
RewriteBase /
RewriteRule ^old-url$ /new-url [R=301,L]
解释一下:old-url是用户访问的旧地址,new-url是你想让他去的新地址。[R=301,L]这两个标记很关键——R=301告诉浏览器这是一次永久重定向(对SEO友好),L意味着这条规则执行完就停下来,不再往下匹配其他规则。
当然,现实中的需求通常更复杂。比如你想把/category/下面的所有文章URL都重写成带参数的动态地址,可以用正则表达式来匹配:
RewriteEngine On
RewriteBase /
RewriteRule ^category/([^/]+)$ /index.php?category=$1 [L]
这里的([^/]+)会捕获斜杠后面的任意字符,比如/category/tech就会把tech作为参数传递给index.php。
全部写好后,保存文件,然后再次重启Apache2让新规则生效:
sudo systemctl restart apache2
现在你去访问旧的URL,应该会自动跳转到新地址。需要提醒的是,.htaccess文件所在的目录以及路径写法可能会因为服务器配置而略有差异——如果你发现规则不工作,先检查一下Apache主配置文件里是否允许.htaccess覆盖(AllowOverride All),这是最容易踩的坑。


































