在.htaccess文件中写RewriteRule无效的问题的解决

近来在Apache Rewrite 拟静态配置时,遇到个问题。写的如下:

RewriteEngine on
RewriteRule ^/t_(.*)/$ /test.php?id=$1

保存在httpd.conf文件中时,发现可以起作用。

而写在.htaccess文件中,死活不起作用。经过研究发现,里面随便填写字符,服务器报500错误,而且进行定向也没问题,所以不是访问不到的问题,初步猜测应该是语法的问题。后来在百度“RewriteRule  .htaccess”时 找到一篇文章,  文章标题:《URL RewriteRule在httpd.conf和.htaccess中的不同点》 看到了:

需要注意的是,在这两个文件中添加到URL重写规则略有不同。而这些不同,对于不熟悉的人来说,很可能会困扰许久。

在Httpd.conf中: (1)Request URI的开头必须以斜线开始; (2)在寻找Cache文件的时候,必须在开头加上斜线; (3)在使用-f或者!-f的时候,必须在开头加上斜线。

在.htaccess中,情况完全相反: (1)Request URI的开头不能有斜线; (2)在寻找Cache文件的时候,不能在开头加上斜线; (3)在使用-f或者!-f的时候,不能在开头加上斜线。

简单而言,就是在httpd.conf中,重写前后的URL在使用绝对路径时需要添加斜线“/”,表示从网站根目录开始;而在.htaccess中,则不需要。

把.htaccess文件中的/去掉  测试OK了。

时间: 2024-08-03 14:40:43

在.htaccess文件中写RewriteRule无效的问题的解决的相关文章

在ifcfg文件中写上gateway网络不通的解决方法

今天给一个学校的服务器centos系统配置网络的时候,发现配好学校给的ip和网关后一启动网卡就断开网络.后来老师帮忙排查以后,告诉我说,不能在ifcfg文件里直接写gateway,而要用一个文件来指定网关的.没时间细究,先备忘一下. 备注或删除/etc/sysconfig/network-scripts/ifcfg-eth1的GATEWAY=行 vim /etc/sysconfig/network-scripts/route-eth1 内容如下 ip段/掩码 via 网关 比如192.168.0

虚拟主机部署tp项目,在.htaccess文件中隐藏index.php

仅适用于Apache下面,如果你的Apache已经开启rewrite模块的话(大部分环境都已经开启),可以在.htaccess文件中添加下面代码: <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule>

问题-[Access]“无法打开工作组信息文件中的表 &#39;MSysAccounts&#39;”的问题的解决方法

问题现象:ado.net oledb方式访问Access数据库文件时报错“无法打开工作组信息文件中的表 'MSysAccounts'”的问题的解决方法 问题处理:1.数据库名称不能命名为:System.mdb可以改为其它名称如:user.mdb 2.表字段名称不能为id名称,可以改为其它名称:abcid,sdeid,dbid,... 3.表名,或字段名不能命名与Access数据库中系统名称相同可以改为其它名称 问题-[Access]"无法打开工作组信息文件中的表 'MSysAccounts'&q

不要在头文件中写函数定义

我们都知道static声明静态函数在别的文件是不可以使用的,但是如果你将定义也写在.h文件下是不是还是这样的呢,或者说编译器会不会提示你这样是有问题的呢?结果却是将static函数的定义直接写在了file.h的头文件中,导致staic关键字失效,代码如下. //file1.h #include <iostream>using namespace std; static void fun() { cout << "static fun" << ends

java 一个文件中写多个class

一个java文件中可以包含多个类,但这些类中一个特殊类,这个类的属性为public,且这个类的名字与文件名相同,java文件中仅有一个类为public. interface Moveable { void run(); } //具体产品角色 class Plane implements Moveable { @Override public void run() { System.out.println("plane...."); } } class Broom implements

可以在一个.java文件中写两个类吗?

一个java文件中可以有任意多个类,接口或是注解..但是只能有一个类是public的,而且这个类的名字要和文件同名,比如public类名为A则文件名就应当为A.java 原文地址:https://www.cnblogs.com/Hellorxh/p/10834208.html

php提取csv格式文件中的字符串出现的问题及解决办法

php带csv格式的数据要用到fgetcsv()函数. 用这下面的语句 $hd=fopen('test.csv','r'); $buf=fgetcsv($hd,1000,','); 打开一个test.csv格式的文件,文件中的内容以","号分开. 取出的第一行代表自动含义,比如 id,messaget,time等等. 从第二行开始表示具体的数据,比如1,消息,12:00. if($buf[1]=="some messages") echo "yes&quo

apache使用.htaccess文件中RewriteRule重定向后,URL中的加号无法解析

今天在使用.htaccess做伪静态的时候,发生一件怪事,URL里存在C++时会有问题,在处理C++这个词的时候,无论如何,$_GET都得不到++,只能得到C空格. 一开始我以为是没用urlencode处理,后来发现确确实实处理了,后台经过排查,确定是rewrite的问题,因为在单文件的环境是可以得到C++这个词的,当然,是经过了urlencode的. 原因:rewrite得不到c++这个词,是因为APACHE在得到参数后,自行做了urldecode处理,导致无法得到C++中的加号部分 决方案目

.htaccess文件中RewriteCond详解

Apache中 RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了 RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始.基础的功能,为了方便理解,下面来看看几个例子. 复制代码代码如下: RewriteEngine onRewriteCond  %{HTTP_USER_AGENT}  ^Mozilla//