首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用arg + uri进行Htaccess内部重写

Apache的.htaccess文件允许你在不修改主配置文件的情况下,对网站的访问进行各种设置和调整。其中,使用RewriteEngine结合RewriteRule可以实现URL的内部重写,这对于SEO优化、简化URL结构以及隐藏实际的文件路径非常有用。

基础概念

  • RewriteEngine: 这个指令用于开启或关闭URL重写引擎。
  • RewriteRule: 这个指令用于定义URL重写的规则。

优势

  1. SEO友好: 可以创建简洁、有意义的URL,有助于搜索引擎优化。
  2. 用户体验: 用户可以更容易地理解和记忆URL。
  3. 安全性: 可以隐藏实际的文件路径,增加网站的安全性。
  4. 灵活性: 可以根据不同的条件对URL进行多种形式的转换。

类型

  • 内部重写: 请求被重写到服务器上的另一个资源,但客户端不会察觉到URL的变化。
  • 外部重定向: 客户端会被发送一个301或302重定向响应,URL会在浏览器的地址栏中改变。

应用场景

  • 伪静态URL: 将动态生成的URL转换为静态形式的URL。
  • 自定义错误页面: 当请求不存在的页面时,重定向到一个自定义的错误页面。
  • 美化URL: 使URL更加简洁美观。

示例代码

假设你想将所有形如http://example.com/article/123的请求内部重写到http://example.com/article.php?id=123,可以在.htaccess文件中添加以下规则:

代码语言:txt
复制
RewriteEngine On
RewriteRule ^article/([0-9]+)/?$ article.php?id=$1 [L]

这条规则的解释如下:

  • RewriteEngine On: 开启URL重写引擎。
  • ^article/([0-9]+)/?$: 这是一个正则表达式,匹配以article/开头,后面跟着一个或多个数字,最后可能有一个斜杠的URL。
  • article.php?id=$1: 这是重写的目标URL,其中$1代表第一个括号中匹配到的内容(即文章ID)。
  • [L]: 表示这是最后一条规则,如果这条规则匹配成功,则不再继续处理后续的重写规则。

遇到的问题及解决方法

问题:重写规则不生效

原因:

  • .htaccess文件没有被正确放置或服务器没有配置允许使用.htaccess文件。
  • RewriteEngine指令被设置为Off
  • 正则表达式匹配错误。

解决方法:

  • 确保.htaccess文件位于网站的根目录下。
  • 检查Apache配置文件(通常是httpd.confapache2.conf)中是否有AllowOverride All或至少AllowOverride FileInfo的设置。
  • 确认RewriteEngine指令设置为On
  • 使用在线正则表达式测试工具验证你的正则表达式是否正确。

问题:无限重定向循环

原因:

  • 重写规则导致请求不断地被重写到同一个页面。

解决方法:

  • 检查重写规则,确保它们不会无意中将请求重定向回原始URL。
  • 可以使用RewriteCond指令添加条件,例如检查请求的URI是否已经包含了目标字符串,以避免循环。
代码语言:txt
复制
RewriteCond %{REQUEST_URI} !^/article\.php
RewriteRule ^article/([0-9]+)/?$ article.php?id=$1 [L]

在这个例子中,RewriteCond确保了如果请求的URI已经是article.php,则不会再次应用重写规则。

通过以上信息,你应该能够理解如何使用.htaccess文件进行URL的内部重写,并解决可能遇到的一些常见问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Apache中 RewriteRule 规则参数介绍

此重写操作的结果可以是内部子处理,也可以是外部请求的转向,甚至还可以是内部代理处理。 这里着重介绍一下 RewriteRule 的规则以及参数说明。RewriteRule指令是重写引擎的根本。...‘nosubreq|NS'(不对内部子请求进行处理) 在当前请求是一个内部子请求时,此标记强制重写引擎跳过该重写规则。...‘passthrough|PT'(移交给下一个处理器) 此标记强制重写引擎将内部request_rec结构中的uri字段设置为filename字段的值,这个小小的修改使得RewriteRule指令的输出能够被...注意:如果需要混合使用多个将URI转换到文件名的模块时,就必须使用这个标记。。此处混合使用mod_alias和mod_rewrite就是个典型的例子。...并且要记住,此标记本身只是对URL加上http://thishost[:thisport]/前缀,重写操作仍然会继续进行。通常,你还会希望停止重写操作而立即重定向,那么就还需要使用’L’标记。

12K30

Apache之Rewrite和RewriteRule规则梳理以及http强转https的配置总结(完整版)

此重写操作的结果可以是内部子处理,也可以是外部请求的转向,甚至还可以是内部代理处理。 以下重点介绍下RewriteRule 的规则以及参数说明。RewriteRule指令是重写引擎的根本。...3.9) 'noescape|NE'(在输出中不对URI进行转义) 此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。...3.10) 'nosubreq|NS'(不对内部子请求进行处理) 在当前请求是一个内部子请求时,此标记强制重写引擎跳过该重写规则。...并且要记住,此标记本身只是对URL加上http://thishost[:thisport]/前缀,重写操作仍然会继续进行。通常,你还会希望停止重写操作而立即重定向,那么就还需要使用'L'标记。...注意,在这一句中指明的重写后的地址用的是服务器上的绝对路径,这是内部跳转。如果使用http://xxxx这样的URL格式,则被称为外部跳转。

31.7K51
  • Apache 中RewriteRule 规则参数

    htaccess)配置都有效,还可以生成最终请求字符串。此重写操作的结果可以是内部子处理,也可以是外部请求的转向,甚至还可以是内部代理处理。...‘noescape|NE‘(在输出中不对URI进行转义) 此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。...arg=P1\%3d1 [R,NE][/quote]可以使‘/foo/zed转向到一个安全的请求’/bar?arg=P1=zed’。...‘nosubreq|NS‘(不对内部子请求进行处理) 在当前请求是一个内部子请求时,此标记强制重写引擎跳过该重写规则。...并且要记住,此标记本身只是对URL加上http://thishost[:thisport]/前缀,重写操作仍然会继续进行。通常,你还会希望停止重写操作而立即重定向,那么就还需要使用’L’标记。

    3.5K20

    apache rewritecond_hfile数据格式中的data字段用于

    使用这个标记,可以标明页面已经被废弃而不存在了. proxy|P (强制为代理 proxy) 此标记使替换成分被内部地强制为代理请求,并立即(即, 重写规则处理立即中断)把处理移交给代理模块。...nosubreq|NS (仅用于不对内部子请求进行处理 no internal sub-request) 在当前请求是一个内部子请求时,此标记强制重写引擎跳过该重写规则。...arg=P1\=$1 [R,NE] 可以使’/foo/zed’转向到一个安全的请求’/bar?arg=P1=zed’....passthrough|PT (移交给下一个处理器 pass through) 此标记强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值,它只是一个小修改,使之能对来自其他...URI到文件名翻译器的 Alias,ScriptAlias, Redirect 等指令的输出进行后续处理。

    4.5K10

    PHP扩展模块、Apache之rewrite模块

    ‘nosubreq|NS’ (仅用于不对内部子请求进行处理 no internal sub-request) 在当前请求是一个内部子请求时,此标记强制重写引擎跳过该重写规则。...‘noescape|NE’ (在输出中不对URI作转义 no URI escaping) 此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。...arg=P1%3d$1[R,NE]可以使’/foo/zed’转向到一个安全的请求’/bar?arg=P1=zed’。...‘passthrough|PT’ (移交给下一个处理器 pass through) 此标记强制重写引擎将内部结构request_ rec中的uri字段设置为filename字段的值,它只是一个小修改,.../def$1 [PT] Alias /def/ghi,如果省略了PT标记,虽然mod_ rewrite运作正常,即,作为一个使用API的URI到文件名翻译器,它可以重写uri=/abc/…为filename

    2.3K30

    nginx rewrite 规则的配置

    nginx 预定义变量 预定义变量 意义 arg_PARAMETER GET请求中变量名PARAMETER参数的值 args GET请求中的参数,如foo=123&bar=blahblah binary_remote_addr...与$uri相同 host 请求中的主机头(Host)字段,如果请求中的主机头不可用或者空,则为处理请求的server名称 hostname 机器名使用 gethostname系统调用的值 http_HEADER.../1.1 uri 请求中的当前URI(不带请求参数,参数位于$args),不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,如 /foo/bar.html...就按照replacement重写。...flag 取值如下: last — 停止处理后续rewrite指令集,然后对当前重写的新URI重新进入 server 进行匹配 break — 停止处理后续rewrite指令集,并不在重新查找,但是当前

    3.5K20

    Apache中的htaccess文件格式简析

    RewriteCond %{REQUEST_URI} !^/blog/ #过滤URI满足正则表达是的地址,满足后执行下一步。...Forbidden 禁止对URL地址的存取 G Gone 标记URL地址不存在 P Proxy 将URL地址传递给mod_proxy L Last 停止处理接下来的规则 N Next 再次重第一个规则开始处理,但是使用当前重写后的...QSA Qsappend 在新的URL地址后附加查询字符串部分,而不是替代 PT Passthrough 将重写后的URL地址传递给另一个Apache模块进行进一步处理 S Skip 忽略之后的规则...它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用! -U 对子请求存在的URL 检查TestString是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问。...它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用! 以上就是常用的一些语法,当然,htaccess文件可以写的东西远不止这些。

    2.2K51

    【YashanDB 知识库】使用 select * 创建的物化视图无法进行查询重写

    select * from test where tid = 66 以及 select tid,tname from test where tid = 66,均无法进行查询重写:使用带双引号的大写字段名才可以进行查询重写...:问题的风险及影响物化视图无法进行查询重写,影响查询性能问题影响的版本所有 yashandb 版本问题发生原因目前 yashandb 在进行物化视图的查询重写时,使用的是 select 中的列名匹配,未根据查询的语义进行匹配解决方法及规避方式在...中,使用的是列名进行匹配。...1、如果后面想进行查询重写的语句是 select *,目前的实现是在 select * 展开以前进行列的匹配,很明显,与 dba_mviews 中存储的 select "TID","TNAME" 是匹配不上的...2、如果后面想进行查询重写的语句是 select tid,tname,因为大小写匹配不上3、如果后面想进行查询重写的语句是 select TID,TNAME,因为没有用双引号包含,依然匹配不上以上三种情况均无法进行查询重写经验总结目前

    3100

    Apache中 RewriteCond 规则参数介绍

    例如,需要在服务器级配置(httpd.conf文件)中根据REMOTE_USER变量进行重写, 就必须使用%{LA-U:REMOTE_USER}。 因为此变量是由URL重写(mod??...nosubreq|NS (仅用于不对内部子请求进行处理 no internal sub-request) 在当前请求是一个内部子请求时,此标记强制重写 引擎跳过该重写规则。...arg=P1=zed’. passthrough|PT (移交给下一个处理器 pass through) 此标记强制重写引擎将内部结构 request_rec中的uri字段设置为 filename字段的值...nosubreq|NS (仅用于不对内部子请求进行处理 no internal sub-request) 在当前请求是一个内部子请求时,此标记强制重写引擎跳过该重写规则。...arg=P1=zed’. passthrough|PT (移交给下一个处理器 pass through) 此标记强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值

    4.7K30

    Nginx服务配置篇·第三课:NextCloud部署安装

    即使安装完,在设置-概览界面,出现很多条警告**开始部署第一步:上传Nextcloud程序到网站目录这边以 /var/www/nextcloud目录为例方法1:本地下载后通过SSH软件上传到服务器方法2:直接使用命令...index index.php index.html /index.php$request_uri; # Rule borrowed from `.htaccess` to handle Microsoft...return 301 /index.php$request_uri; } # Rules borrowed from `.htaccess` to hide certain paths from...from `.htaccess` location /remote { return 301 /remote.php$request_uri; } location /...图片安装前可以确认一下Nextcloud目录权限,没权限的话安装时也会提示“服务器内部错误”数据库地址这边要加上数据库的端口,比如MySQL默认端口是3306。点击安装即可完成。

    8.8K30

    由浅入深剖析.htaccess

    1、.htaccess文件使用前提 .htaccess的主要作用就是实现url改写,也就是当浏览器通过url访问到服务器某个文件夹时,作为主人,我们可以来接待这个url,具体地怎样接待它,就是此文件的作用...要想使用这个强大功能,就得开启apache里面的重写模块。 前面的文章中曾经讲到过windows和ubuntu开启 rewrite模块使用.htaccess 。...2、.htaccess基本语法介绍 开启重写引擎 :RewriteEngine on 设置重写的根目录:RewriteBase /     — 说明 :因为定义了这个文件夹,所以对应的替换就有了一个参照...如果用户访问使用的URL满足所有列出的RewriteCond 提出的条件,那么进行下一步RewriteRule 即开始进行引导,这才开始实现.htaccess文件的重要功能。...RewriteCond的条件那么就进行重写,discuz的没有列出RewriteCond 所以应该全部都进行重写。

    5K40

    Nginx 配置详解

    Nginx 配置 文章目录 Nginx 配置 文件结构 全局配置 events 配置 http 配置 server 配置 Rewrite 一、地址重写,地址转发,重定向 二、URL 重写 语法: 使用:...地址转发一般发生在同一站点项目内部,而地址重写且不受限制。 地址转发的速度比地址重定向快。...:该指令是实现URL重写的指令 regex:用于匹配URI的正则表达式 replacement:将regex正则匹配到的内容替换成 replacement。...arg1=value1&arg2=value2 中的 arg1=value1&arg2=value2 $content_length: 该变量中存放了请求头中的Content-length字段 $content_type...因此如果不是该域下的请求,就会使用 Rewrite进行重定向到 http://www.xxx.com/images/forbidden.png 这个图片,比如这张图片是一个x或其他的标识,然后其他的网站就访问不了你这个图片哦

    6.3K22

    访问Apache服务器自动跳转到https协议

    它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。...类似的还有nginx、Tomcat等 .htaccess是什么 .htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。...作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。...RewriteEngine # 是重写引擎开 RewriteCond # 重写条件 RewriteRule # 重写规则 方法 80端口是普通的http,https是443端口。...^443$ RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] 小结 对于php web框架来说,修改

    69930
    领券