在apache中使用.htaccess文件的注意事项

前几天在使用.htaccess做伪静态的时候,发生一件怪事,U景逸SUVL里存在C++时会有标题,在处理C++这么些词的时候,无论如何,$_GET都得不到++,只好获得C空格.

在apache的配备文件中:

一早先笔者觉得是没用urlencode处理,后来意识真正处理了,后台经过排查,明确是rewrite的标题,因为在单文件的条件是足以获取C++这几个词的,当然,是透过了urlencode的.

<VirtualHost *:80>
    ServerName tp5.com
    DocumentRoot d:/wamp/www/tp5.com/public
    <Directory  "d:/wamp/www/tp5.com/public/">
        Options Indexes FollowSymLinks MultiViews(是否允许浏览目录下的列表)
        AllowOverride All/None("允许/禁止"使用.htaccess文件)
        Require local
    </Directory>
</VirtualHost>

缘由:rewrite得不到c++那么些词,是因为APACHE在获取参数后,自行做了urldecode处理,导致力不从心取得C++中的加号部分

上述配置与重定向功效非亲非故,apache是或不是开启重定向作用首借使看:

 

#LoadModule rewrite_module modules/mod_rewrite.so

决方案近年来只看到了一种,在PHP的官网上也有记载,在处理c++时,进行一回urlencode处理,即urlencode(urlencode(‘C++’)),那样再rewrite的时候,就能够拿走C++那个词了.

比方没有打开重定向功效,.htaccess文件也是足以用的,像那样的情节:

屈居PHP.NET上的具体地址 http://www.php.net/urlencode

deny from all

图片 1

会禁止从浏览器访问当时目录下的装有文件,可是不或许运用重定向成效.

 

假使打开重定向功效:

LoadModule rewrite_module modules/mod_rewrite.so

.htaccess文书档案的内容能够参见tp5的重定向写法,如下:

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ aaa.php/$1 [QSA,PT,L](把括号里的内容替换成$1的内容,这句会默认把所有的网址前加上aaa.php)
</IfModule>

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图