1、PHP获取Rewrite重写后的URL地址函数,重写后地址栏怎么还是动态带问号的,虽然伪静态后的地址也可以访问
重写后为:/thread-4727-1-1.html,那我要怎样才能用PHP得到thread-4727-1这是通过伪静态实现的,你是独立主机用户吗? DISCUZ有教程的,如果是空间要
2、RewriteRule 跳转
在httpd.conf里设置,假设你的根目录是/var/wwwroot
<Directory /var/wwwroot/huiyuan>
RewriteEngine on
RewriteBase /huiyuan
RewriteRule ^/t_(.*)\.html$ test.php?id=$1 [L]
</Directory>
在目录下/var/wwwroot/huiyuan的.htaccess里写
RewriteEngine on
RewriteBase /huiyuan
RewriteRule ^t_(.*)\.html$ test.php?id=$1 [L]
后边的[R]应该写成[L],R的意思是内让浏览器容跳转,地址栏的地址就变成test.php?id=2了
请参考apache参考手册
3、Apache .htaccess 设置域名重定向
可以在htaccess文件中添加下面的代码,当访问abc.com的时候会重定向到www.abc.com,当然也可以设置重定向到其它的域名。
<IfMole mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^abc.com$ [NC]
RewriteRule ^(.*)$ http://www.abc.com/$1 [R=301,L]
</IfMole>
4、apache php rewriterule疑问
1)我期望浏览器访问192.168.1.1/1/a.php时,服务器会当作192.168.1.1/a.php?id=1来处理,应该怎样写rewriterule
RewriteRule ^/(\d+)/a\.php$ a.php?id=$1
2)rewriterule必须配版置域名吗,如果是ip可不可以权
从1的例子可以看出,rewrite匹配的内容是域名或者IP之后的内容,域名、IP都可以工作,但是无法对域名或者IP本身进行处理,那样的处理需要使用virtual server
3)rewriterule的正则,开头匹配是从http://开始还是其他,如现在的情况,rewriterule为:
RewriteRule ^/a/test\.php$ a/test.php
当浏览器访问192.168.1.1/a/test.php时,服务器会当作怎样的url处理
rewrite开头是域名或者IP之后的地址,也不匹配域名之前的协议(http、https等),只对地址进行处理,你的例子:
RewriteRule ^/a/test\.php$ a/test.php
好像没有任何转换,也就是处不处理都没有任何改变。
5、关于PHP urlrewrite的问题
这个可以不用来Rewrite实现的。
例如自URL为:http://www.abc.com/?XYZ
你要获取XYZ,应该在index.php文件中这样写:
$id = $_SERVER['QUERY_STRING'];解释一下:$_SERVER['QUERY_STRING']就是URL中问号(?)后的内容。
这样就可以了。
6、php中重写里面RewriteCond %{REQUEST_FILENAME} !-f是什么意思
RewriteCond 重写条件
%{REQUEST_FILENAME} 由Apache服务器解析成文件名
!-f 代表 不存在
整句语句版意思是:
如果访问权的文件不存在
这句是Apache的配置文件里的其中一句,通常会跟上一句类似下面的语句
RewriteRule index.html index.php
意思是如果 index.html文件不存在,那么跳转到index.php文件
7、thinkphp 配置rewrite去掉index.php后 找不到模块
thinkphp 配置rewrite去掉index.php后 去掉后他跳转就中找不到了,加回去
8、php curl 怎么获取rewrite的url
//获得要跳转的网址,进行下一步操作
function curl_post_302($url,$data=null) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 获取转向后的内容
$data = curl_exec($ch);
$Headers = curl_getinfo($ch);
curl_close($ch);
if ($data != $Headers){
return $Headers["url"];
}else{
return false;
}
}
echo curl_post_302($302url);//得到要跳转的地址
9、nginx+Rewrite规则:全站强制https跳转,/admin.php 文件除外,它要走http。请问这个规则要怎么写?
nginx强制使用https访问(http跳转到https)
基于nginx搭建了一个https访问的虚拟主机,监听的域名是test.com,但是很多用户不清楚https和http的区别,会很容易敲成http://test.com,这时会报出404错误,所以我需要做基于test.com域名的http向https的强制跳转
我总结了三种方式,跟大家共享一下
nginx的rewrite方法
思路
这应该是大家最容易想到的方法,将所有的http请求通过rewrite重写到https上即可
配置
server {
listen 192.168.1.111:80;
server_name test.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
搭建此虚拟主机完成后,就可以将http://test.com的请求全部重写到https://test.com上了
nginx的497状态码
error code 497
497 - normal request was sent to HTTPS
解释:当此虚拟站点只允许https访问时,当用http访问时nginx会报出497错误码
思路
利用error_page命令将497状态码的链接重定向到https://test.com这个域名上
配置
server {
listen 192.168.1.11:443; #ssl端口
listen 192.168.1.11:80; #用户习惯用http访问,加上80,后面通过497状态码让它自动跳到443端口
server_name test.com;
#为一个server{......}开启ssl支持
ssl on;
#指定PEM格式的证书文件
ssl_certificate /etc/nginx/test.pem;
#指定PEM格式的私钥文件
ssl_certificate_key /etc/nginx/test.key;
#让http请求重定向到https请求
error_page 497 https://$host$uri?$args;
}
index.html刷新网页
思路
上述两种方法均会耗费服务器的资源,我们用curl访问baidu.com试一下,看百度的公司是如何实现baidu.com向www.baidu.com的跳转
可以看到百度很巧妙的利用meta的刷新作用,将baidu.com跳转到www.baidu.com.因此我们可以基于http://test.com的虚拟主机路径下也写一个index.html,内容就是http向https的跳转
index.html
<html>
<meta http-equiv="refresh" content="0;url=https://test.com/">
</html>
nginx虚拟主机配置
server {
listen 192.168.1.11:80;
server_name test.com;
location / {
#index.html放在虚拟主机监听的根目录下
root /srv/www/http.test.com/;
}
#将404的页面重定向到https的首页
error_page 404 https://test.com/;
}
10、nginx rewrite怎么获取当前域名
当前域名可以使用 $host 代替
列如:
location /admin {
rewrite ^/(.*) http://$host/mh.admin/login.php permanent;
}
上面的意思是 当域名后面接的是admin 是跳转到 域名/mh.admin/login.php