12

Apache Rewrite规则(伪静态)实例

1.Rewrite规则简介

Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。

基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。

基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性(httpd.conf中的Option FollowSymLinks)且在.htaccess里要声明RewriteEngine on。

2. Apache mod_rewrite规则中的标记含义

==常用变量:

详细变量介绍,查看>>Apache Rewrite服务器常用变量汇总

%{QUERY_STRING} URL参数(Query String)是URL里面“?”后面的部分,它通常用于传输参数给CGI脚本或者其它动态页面。在Apache中,该值存储在环境变量QUERY_STRING中(在PHP中,可以通过$_SERVER['QUERY_STRING']访问到),是Apache定义的“变量=值”向量(数组)。 在Apache中,大多对URL进行操作的指令,如、Redirect、Alias和RewriteRule,都不能直接访问该数据;不过,mod_rewrite模块却可以对URL参数进行添加、删除和修改。其中的关键就是使用RewriteCond来匹配%{QUERY_STRING}变量,如果需要的话,还可以使用[QSA]标志来附加URL参数。

%1、%2…%n 是反向引用,来自之前的RewriteCond中正则表达式的匹配结果

%{HTTP_HOST} 保存主机头信息,也就是当前访问的域名,即“http://”和之后第一个“/”之间的内容。如果访问地址是http://www.mrdede.com/aaa,则%{HTTP_HOST}=www.mrdede.com;如果访问http://cdn.www.mrdede.com/,%{HTTP_HOST}=cdn.www.mrdede.com

%{SERVER_PORT} 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值

httpd.conf配置如下:

客户端访问域名www.mrdede.com
%{HTTP_HOST} = www.mrdede.com
%{SERVER_NAME} = mrdede.com
所以,在实际程序中,应尽量使用%{HTTP_HOST} ,比较保险和可靠。

%{SERVER_PORT} 端口号

%{REQUEST_URI} 假设访问地址为http://mrdede.com/aaa/index.php?b=1&c=2,则%{REQUEST_URI}的值是http://mrdede.com后面包含正斜杠“/”在内的内容,即%{REQUEST_URI}=/aaa/index.php?b=1&c=2

%{HTTP_USER_AGENT} 是User-agent信息

 

==指令:

RewriteBase 定义了重写基准目录。

  • 例如,如果你将虚拟站点设置在/var/www目录下,删除这行将会导致重定向到http://mrdede.com/var/www/1.php。显然这是找不到的,而且你也不会希望用户看见你的服务器的目录结构。
  • 再举个例子,如果RewriteBase /base/,那么将会重定向到http://mrdede.com/base/1.php。

 

3.目录级(.htaccess)实例说明 Continue reading

11

linux Kali开启SSH远程连接或者无法连接解决方法

kali开启ssh的方法

1、打开文件# vim /etc/ssh/sshd_config

2、找到#PasswordAuthentication yes (是否允许密码身份验证) 把#的注释去掉

3、找到PermitRootLogin(是否允许ROOT用户登录),把值改为yes,即:PermitRootLogin yes

4、启动SSH,命令:/etc/init.d/ssh start

5、重启SSH,命令:/etc/init.d/ssh restart

6、设置开机自动启动,命令:update-rc.d ssh enable

如果远程无法连接,使用下面操作:

如果最下面(红色文字)显示类似下面的一行或多行文字:

意思就是没有密钥,那么操作如下:

生成新密钥,在输入命令后会提示输入密码,可以不输入,直接回车,再次提示输入相同密码,再回车,方法如下:

重启SSH服务

查看SSH状态

正常情况应该不会有错误提示了,现在就可以通过22端口远程连接了。

阿里云kali源

树莓派安装了Kali系统的SD卡扩容问题(分区太小)解决办法

 

11

Linux kali开启端口方法

开放端口,如果不想通过安装ufw命令来配置端口,可以看iptables查看、开放、删除端口、保存设置

安装ufw命令

ufw命令使用实例如下:

linux Kali开启SSH远程连接或者无法连接解决方法

Linux修改开放22等端口方法

查看端口被哪个进程占用

 

11

iptables查看、开放、删除端口、保存设置

Linux开放端口,查看端口,删除端口

iptables选项

查看防火墙规则

增加防火墙规则:开放指定的端口

删除已添加的iptables规则

屏避IP

保存iptables更改

最后一部最重要,iptables规则全部输入完成后,都要进行一次保存,否则重启后还是原来的规则。

———————————

2020-04-18 更新

不同版本的Linux系统,iptables文件放置位置会有不同,但是不管怎么不同,一般会在/etc下的某处,或者是/usr 下的某个。如果找不到位置,可以使用find快速定位。

暂时,新眼看到的是kali 2020新装的,在/etc下,

ubuntu 18.0 ,2020年新装的,在/usr下,

Kali 2020的iptables是在上面的位置。

保存生效

其它方法查看端口是否开启:

格式,如:lsof -i:端口号

说明:有输出,则表示端口已开放;反之,未开放。

示例,如下:

 

查看端口被哪个进程占用

 

10

Linux查看分区、创建分区、格式化、挂载等命令

df命令:查看分区

fdisk命令:查看、增减分区

划分swap分区

swap分区就是虚拟内存,用于解决内存不足使用。

mkfs命令:格式化分区

mount命令:挂载

注意:挂载前先要格式化,否则无法挂载!

设置开机自动挂载:如不设置,重启后分区将脱离挂载,但是在设置下面文件之前,先要执行一次挂载命令(mount /dev/mmcblk0p5 /www)。

打开后,6列分别含义:

第1列是设备名或者卷标
第2列是挂载点(也就是挂载目录)
第3列是所要挂载设备的文件系统或者文件系统类型
第4列是挂载选项,通常使用defaults就可以
第5列设置是否使用dump备份,置0为不备份,置1,2为备份,但2的备份重要性比1小
第6列设置是否开机的时候使用fsck检验所挂载的磁盘,置0为不检验,置1,2为检验,但置2盘比置1的盘晚检验。

我要把/dev/mmcblk0p6挂载到/www下,那么在/etc/fstab文件内最后增加输入内容如下:

保存文件后,依次次执行:

如果没有错误,那么就可以看到刚才在文件中输入的挂载的磁盘内容了。重启,# reboot ,看看是否磁盘是否被自动挂载了。

09

CentOS 6.9下WDCP集成环境使用反向代理配置域名无端口号访问Node网站

CentOS 6.9安装了WDCP的的集成环境(nginx+apache+php+mysql+xend+pureftpd+phpmyadmin),为了使访问Node项目的域名后不显示端口号,那么需要使用Nginx的反向代理,但是还要保持集成环境中的apache对前端的动态内容处理。

配置文件是建站时默认生成的,那么一些默认内容我没有删除,只是给注释掉了。

1、打开WDCP管理后台,默认是http://你的ip:8080/,点击步骤如下图:

20180109161233

2、修改nginx配置文件,配置文件名称默认形式一般为www_mrdede_com.conf,修改方法如下: Continue reading

09

Linux为.sh文件增加可执行权限

参看Linux修改权限命令之chmod

假定test.sh文件权限如下:

现在是所有者可读写,其它与默认为可读,权限代码为644。

修改为所有用户与组都可执行,在644的基础上,每个位数上加1,即755,命令如下:

增加可执行权限完成,这样就可以通过下面方法运行脚本了。

09

Linux CentOS编译与非编译安装NodeJS方法

淘宝NodeJS镜像

Linux下载地址 https://npm.taobao.org/mirrors/node/v8.9.4/node-v8.9.4-linux-x64.tar.xz

CentOS 6.9安装NodeJS命令:

一、非编译安装NodeJS:

如果是上面的目录结构,这是不需要编译安装,也就是说直接把它放在某个位置,之后把目录加入到Linux环境变量就可以使用了。方法如下:

建一个文件夹,准备复制node文件:

复件文件(cp前面有个反斜杠,意思是屏蔽当前命令使用别名):

使用vi工具(vi/vim命令及使用方法)把路径加入环境变量:

打开文件后,把下面代码加在最后面,如下:

修改完文件后,需要再重新执行一下环境文件

查看是否成功:

如果成功则会打印出安装的Node版本号,则清理一下垃圾,如下:

完成。

二、编译安装NodeJS:

如果是需要编译安装的Node,命令如下:

如果无法查看到版本号,需要手动加入环境变量:

还有一种加入到全局的方法:

三、yum安装NodeJS:

另有一种更简单的方法,通过yum包管理器安装,我没有这么安装过,因为我怀疑他不是最新版本,但是我查询它是有Nodejs-x64包的,命令如下: