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