.htaccess 偽靜態(tài)怎么用
問題背景:首先該取消的注釋都取消了
?????????????????? 其次重啟apache后 phpinfo 可以查詢到mod_rewrite
需要解惑:不想在vhosts.conf中配置偽靜態(tài) 而在根目錄下用.htaccess? 求指點 謝謝
問題背景:首先該取消的注釋都取消了
?????????????????? 其次重啟apache后 phpinfo 可以查詢到mod_rewrite
需要解惑:不想在vhosts.conf中配置偽靜態(tài) 而在根目錄下用.htaccess? 求指點 謝謝
2018-01-08
舉報
2018-01-29
一、如何建立【.htaccess】文件
直接新建一個文件,并且命名為【.htaccess】是無法實現(xiàn)的,這是一個只有擴展名,沒有文件名的文件,系統(tǒng)會提示輸入文件名。我們可以用如下方法實現(xiàn):
1、下載一個這個文件;
2、使用FTP、DW、記事本等軟件建立,F(xiàn)TP可以直接建立這個文件,軟件的話新建一個文件另存一下就可以了;
3、使用CMD或其他操作系統(tǒng)界面重命名文件為【.htaccess】;
4、【.htaccess】文件通常放置在根目錄下,也可放置在子目錄中,其效力范圍為相對當(dāng)前的路徑,路徑規(guī)則與html一致。
?
二、讓【.htaccess】文件生效
有時候放置了【.htaccess】文件發(fā)現(xiàn)并沒有作用,是因為Apache沒有開啟它,我們可以在Apache的安裝目錄的【conf】目錄中找到【httpd.conf】文件,使用記事本打開,開啟這個選項:
1、找到【LoadModule rewrite_module】,去掉前面的【#】號;
2、找到所有【AllowOverride None】修改為【AllowOverride All】
3、如果沒有【AllowOverride None或All】這條,則找到【<Directory />】和【</Directory>】,在這之間加上【AllowOverride All】;
4、重啟Apache即可生效。
?
三、實例
偽靜態(tài)路徑:【http://www.abc.com/news/post-16.html】
真實路徑:【http://www.abc.com/index.php?m=post&c=index&catdir=news&id=16】
【.htaccess】寫法:
============
RewriteEngine on
RewriteRule http://www.abc.com/([a-zA-Z]{1,})/post-([0-9]{1,})\.html$ http://www.abc.com/index.php?m=post&c=index&catdir=$1&id=$2
============
當(dāng)然,如果是放在根目錄下,使用相對路徑即可:
============
RewriteEngine on
RewriteRule?([a-zA-Z]{1,})/post-([0-9]{1,})\.html index.php?m=post&c=index&catdir=$1&id=$2
============
?
解釋:
注意,因為顯示的問題,可能看不清空格,可以復(fù)制代碼粘貼到其他軟件查看。
文件中【RewriteEngine on】表示開啟rewrite;
【RewriteRule】表示規(guī)則,每行一條,格式為【RewriteRule 匹配用戶提交的的URL 服務(wù)器上腳本真正的URL】;
路徑中的染色部分為參數(shù),匹配時為標(biāo)準(zhǔn)的正則表達式,真實路徑中的參數(shù)使用【$1】、【$2】、【$3】從左到右依次替代匹配URL中的正則表達式。
?
驗證:
建立一個.htaccess文件,寫入以下內(nèi)容:
============
RewriteEngine on
RewriteRule?([a-zA-Z]{1,})/post-([0-9]{1,})\.html test.php?get1=$1&get2=$2
============
保存。
?
再建立一個test.php文件,寫入以下內(nèi)容:
============
<?php
echo '你的get1是:' . $_GET['get1'];
echo '<br/>';
echo '你的get2是:' . $_GET['get2'];
?>
============
保存到同目錄。
?
訪問http://localhost/news/post-15.html
如果頁面顯示:
============
你的get1是:news
你的get2是:15
============
即宣告成功。