在 Apache2 中,URL 重写通常是通过使用 mod_rewrite
模块来实现的。这个模块允许你根据特定的规则修改请求的 URL。以下是实现 URL 重写的基本步骤:
启用 mod_rewrite 模块:
确保 mod_rewrite
模块已经启用。你可以使用以下命令来启用它:
sudo a2enmod rewrite
配置 Apache 配置文件:
你需要在 Apache 的配置文件中启用 URL 重写。通常,这可以在虚拟主机配置文件中完成。例如,如果你使用的是 /etc/apache2/sites-available/your-site.conf
,你可以添加以下内容:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
注意 AllowOverride All
这一行,它允许 .htaccess
文件中的重写规则生效。
创建或编辑 .htaccess 文件:
在你的网站根目录下创建或编辑 .htaccess
文件,并添加重写规则。例如:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# 重写规则示例:将 /old-url 重写到 /new-url
RewriteRule ^old-url$ /new-url [R=301,L]
# 另一个示例:将所有请求重写到 index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]
</IfModule>
解释:
RewriteEngine On
:启用重写引擎。RewriteBase /
:设置重写的基础路径。RewriteRule ^old-url$ /new-url [R=301,L]
:将 /old-url
重写到 /new-url
,并使用 301 重定向。RewriteCond %{REQUEST_FILENAME} !-f
和 RewriteCond %{REQUEST_FILENAME} !-d
:检查请求的文件或目录是否存在。RewriteRule ^(.*)$ index.php [L]
:将所有请求重写到 index.php
。重启 Apache 服务器:
保存 .htaccess
文件后,重启 Apache 服务器以使更改生效:
sudo systemctl restart apache2
通过以上步骤,你就可以在 Apache2 中实现 URL 重写了。根据你的具体需求,可以编写不同的重写规则。