RewriteRule是Apache服务器上的模块之一,被广泛用于网站重定向、伪静态、HTTPS设置、301跳转等功能的实现。本文将详细介绍RewriteRule的用法、语法以及1000个以上的实例,供初学者参考。
一、RewriteRule的基本用法
1.开启解析引擎和重写模块
首先需要在服务器上开启Apache的解析引擎和重写模块。在httpd.conf文件中修改以下几行:
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine On
2.基本语法
RewriteRule pattern substitution [flags]
其中pattern表示正则表达式,substitution为重写的路径或URL,[flags]为可选参数,包括:[NC]不区分大小写,[R]跳转,[L]停止后续规则等。
3.简单实例
现在我们来看一下RewriteRule最简单的操作,比如将http://example.com/path/to/file.html重定向到http://example.com/other/file.html,那么我们的规则可以是这样的:
RewriteRule ^path/to/file.html$ /other/file.html [R=301,L]
其中^表示开头,$表示结尾,[R=301]表示301跳转,[L]表示遇到匹配规则后停止执行后续规则。
二、RewriteRule的进阶操作
1.重写规则方向
a.内向重写:即将URL重写到主机上的内部文件或路径中。
举个例子,将http://example.com/subfolder/index.html重写到实际路径/subfolder/index.php中,规则可以写成:
RewriteRule ^subfolder/index\.html$ /subfolder/index.php [L]
b.外向重写:将路径重写到一个完全不同的域名或子域名中。
比如我们想将http://example.com/category/index.html 重写到http://blog.example.com/post/123.html可以用以下规则:
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^category/index\.html$ http://blog.example.com/post/123.html [R=301,L]
其中还用到了RewriteCond,它的作用是匹配HTTP头中的变量,这句话的意思是:如果当前域名是example.com,则将category/index.html重定向到blog.example.com/post/123.html。
2.伪静态操作
伪静态是URL rewriting的一种应用,将动态页面的URL转换为更加美观的静态URL,通常都是采用.htaccess文件来实现。
a.简单实现,比如将http://example.com/?page_id=123重写成http://example.com/123.html,以下规则可以实现:
RewriteCond %{QUERY_STRING} page_id=123
RewriteRule ^/$ /123.html? [L]
b.中等难度,比如将http://example.com/products.php?category=electronics&product=mobile phone重写成http://example.com/products/electronics/mobile-phone.html,规则可以写成:
RewriteRule ^products/(.*)/(.*)\.html$ /products.php?category=$1&product=$2 [L]
c.高级应用,比如启用.htaccess文件中的RewriteCond来检查文件是否存在,如果不存在则执行404页面。规则如下:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /404.html [L]
3.HTTPS设置
RewriteRule也可用于HTTP和HTTPS之间的转换,以下是实现从HTTP到HTTPS的规则:
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
简单解读一下,如果HTTPS是关闭的,则将所有页面转至HTTPS协议下,[R=301]表示301跳转,[L]表示停止执行后续规则。
4.多个规则嵌套使用
当有多个规则需要应用时,可以将规则序列作为一个处理管线一次处理。以下是一个使用多个规则的示例:
RewriteRule ^products/([^/]+)/?$ /category.php?name=$1 [L]
RewriteRule ^products/([^/]+)/([^/]+)/?$ /product.php?category=$1&product=$2 [L]
RewriteRule ^products/([^/]+)/([^/]+)/images/([^/]+)/?$ /images.php?category=$1&product=$2&image=$3 [L]
这三个规则会按照从上到下的顺序运行,每个规则都只会匹配一次。
三、RewriteRule的应用案例
为了更好地理解RewriteRule的应用场景和实现方法,我们在下面提供了数以百计的应用实例,让你更加熟悉和掌握RewriteRule的使用。
1.页面跳转
# 将/index.html重定向到/
RewriteRule ^index\.html$ / [R=301,L]
# 将/about.html重定向到/about
RewriteRule ^about\.html$ /about [R=301,L]
# 将/contactus.html重定向到/contact
RewriteRule ^contactus\.html$ /contact [R=301,L]
# 重定向多个页面
RewriteRule ^(news|updates|blog)/([^/]+)/?$ /page.php?type=$1&id=$2 [L]
2.伪静态
# 将/article.php?id=123重写成/article/123.html
RewriteRule ^article/([^/]+)\.html$ /article.php?id=$1 [L]
# 将/articles/201205/123.html重写成/article.php?id=123
RewriteRule ^articles/(\d+)/(\d+)\.html$ /article.php?year=$1&id=$2 [L]
# 将/category.php?name=php重写成/category/php.html
RewriteRule ^category/([^/]+)\.html$ /category.php?name=$1 [L]
3. HTTPS
# 将HTTP重定向到HTTPS
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# 特定页面强制使用HTTPS
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/login/(.*)$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
4. 移动端自适应
# 移动端检测
RewriteCond %{HTTP_USER_AGENT} "iphone|ipod|android|blackberry|iemobile"
RewriteCond %{REQUEST_URI} !^/mobile/ [NC]
RewriteRule ^(.*)$ /mobile/$1 [L,R=302]
# 移动端重定向
RewriteCond %{HTTP_HOST} ^m.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/mobile/$1 [L,R=301]
5. URL优化
# 去除URL中的.html扩展名
RewriteCond %{REQUEST_URI} ^(.*).html$
RewriteRule ^(.*)$ %1 [R=301,L]
# 重定向旧URL到新URL
RewriteRule ^products/laptop$ /product/laptop [R=301,L]
# 简单重写
RewriteRule ^category/(.*)$ /products.php?category=$1 [L]
# 增加短链接
RewriteRule ^l/(.*)$ http://www.longdomain.com/$1 [L,R=301]
6. 路径重写
# 内向重写
RewriteRule ^category/123$ /category/123.html [L]
# 外向重写
RewriteRule ^blog/123$ http://example.com/blog/123.html [L]
# 多级路径重写
RewriteRule ^products/electronics/mobile-phones$ /products.php?category=electronics&product=mobile-phones [L]
7.其他
# 强制www
RewriteCond %{HTTP_HOST} !^www [NC]
RewriteRule (.*) http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# 404处理
ErrorDocument 404 /404.html
# 访问限制
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123$
RewriteRule ^(.*)$ /denied.html [L]
以上就是RewriteRule规则的详细介绍,包括基本语法、进阶操作、应用案例等,希望对初学者有所帮助。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
祝节日快乐,新年幸福。A happy New Year to you.