2015-03-25 49 views
0

我想使用htaccess文件來重寫網址,我真的沒有這方面的經驗,我所做的一切都是從這裏和谷歌搜索。我的鏈接中有查詢參數。我發送一切到一個index.php頁面。htaccess多個參數不起作用,?

我已經測試了所有鏈接,然後嘗試重寫它們,它們都在索引頁中工作。於是我創建了一個htaccess文件來重寫鏈接,但我得到的只是一個空白頁面,沒有任何變量正在發送到索引頁面。我在index.php頁面中使用$ _GET來檢索變量。

這裏是我嘗試重寫的鏈接類型以及我的實際htaccess文件副本的列表,同時mod rewrte已打開並且在Apache中正常運行。請幫我改變我的htaccess文件,以便根據我下面顯示的示例鏈接完全做我想要的東西?

該目錄重寫是好的,並相應地工作,這是沒有的鏈接。

另外,如果你在鏈接#注意1#2頁面參數不,不應該出現在改寫鏈接,這2個鏈接ONLY而是一個空白或空字符串仍然發送到我的index.php。

example--

<?php 

$page= $_GET['page']; 
$user= $_GET['user']; 
$act= $_GET['act']; 
$section= $_GET['section']; 
$search= $_GET['search'] 
$xx= $_GET['xx']; 

if($page == ''){ 
    //Do some code 
}elseif($page == 'search'){ 
    //Do some code 
?> 

重寫這些類型的鏈接

筆記 - 「HTTP://」 是所有這些環節的面前,堆棧溢出不會讓我將其添加和帖子。


LINK#1

本地主機/ notetag2/JohnSmith對/全部/ 1

- 改寫爲 -

本地主機/ notetag2/index.php頁面= & user = johnsmith & act = all & section = 1


LINK#2

本地主機/ notetag2/JohnSmith對/所有

- 改寫爲 -

本地主機/ notetag2/index.php的?頁= &用戶= JohnSmith對&行爲=所有


LINK#3

本地主機/ notetag2 /搜索/ JohnSmith對

- 改寫爲 -

本地主機/notetag2/index.php?page=seach & search = johnsmith


LINK#4

本地主機/ notetag2 /圖片/ 1

- 改寫爲 -

本地主機/ notetag2/index.php頁面=圖片& xx = 1


Rewr ITE目錄

--REWRITE中場休息

網絡


這裏是我的實際htaccess文件

<IfModule mod_rewrite.c> 

    RewriteEngine on 
    RewriteBase /notetag2/ 
    RewriteRule ^index\.php$ - [L] 

    RewriteRule ^(.*)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=$1&user=$2&act=$3&section=$4 [L,NC] 

    RewriteRule ^(.*)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=$1&user=$2&act=$3 [L,NC] 

    RewriteRule ^(.*)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=$1&user=$2 [L,NC] 

    RewriteRule ^(.*)/$ notetag2/index.php?page=$1 [L,NC] 

    RewriteRule ^search/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=search&q=$1 [L,NC] 

    RewriteRule ^pictures/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=picturesh&xx=$1 [L,NC] 

    RewriteRule ^([a-zA-Z0-9_-]+)/?$ $1.php [L,NC] 


    RewriteRule ^pages/(.*) web/$1 [L] 


    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule .* /notetag2/index.php [L,QSA] 

</IfModule> 
+0

爲什麼你的htaccess文件會說「notetag2」,但是你的問題想把事情從/改寫成「notetag」?他們應該是不同的? – 2015-03-25 03:04:05

+0

不,他們沒有不同。他們是一樣的。我不使用複製和粘貼。我輸入所有內容,並在這裏輸入錯誤。現在在我的帖子中已經改變了。說notetag2而不是notetag。你能幫我解決我的問題嗎? – 2015-03-25 03:10:50

+0

你的htacces文件在哪裏? – 2015-03-25 03:26:06

回答

0

您需要解決幾個你常用表達。由於您的htaccess文件位於您的notetag2目錄中,因此您無需與主導的「notetag2」匹配。

但首先,你的規則不是按正確的順序。如果你想匹配/search/something,那麼你不能有一個規則匹配什麼,否則它會匹配/search。因此,這些規則需要在頂部:

RewriteRule ^search/([a-zA-Z0-9_-]+)/?$ index.php?page=search&q=$1 [L,NC] 
RewriteRule ^pictures/([a-zA-Z0-9_-]+)/?$ index.php?page=picturesh&xx=$1 [L,NC] 

你因爲這是隱含的,因爲規則是在notetag2目錄也不需要notetag2/在規則的目標。

因此,那些2條規則後,你需要採取其他每個重寫從最大的開始到最小:

本地主機/ notetag2/JohnSmith對/全部/ 1

--REWRITE TO- -

localhost/notetag2/index.php?頁=教程&用戶= JohnSmith對&行爲=所有&節= 1

你幾乎有這樣的,只是有一些隨機(.*)/在正則表達式,這將使它永遠不會匹配你想要的東西的前面。你想這個代替:

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=tutorial&user=$1&act=$2&section=$3 [L,NC] 

然後爲下一個:

本地主機/ notetag2/JohnSmith對/所有

--REWRITE中場休息

本地主機/ notetag2 /指數.php?page = tutorial & user = johnsmith & act = all

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=tutorial&user=$1&act=$2 [L,NC] 

「搜索」和「圖片」應由上面的前兩條規則照顧。

無論您在舊htaccess文件底部有哪些其他規則,他們都需要遵循這些規則。

所以只有葉:

--REWRITE中場休息

網絡

由於這些下手notetag2,你需要將這些規則放在不同的htaccess文件中,即文檔根目錄中的文件:

RewriteRule ^pages/(.*)$ /web/$1 [L] 
+0

如果您在鏈接#1和#2中注意到,頁面參數不會,也不應該出現在這兩個鏈接的重寫鏈接中,但空白或空字符串仍應發送到我的index.php以表示該變量。在前2個鏈接中沒有$ page = tutorial,前2個鏈接中的$ page變量只應始終包含一個空字符串。所以你建議不起作用! – 2015-03-25 04:51:26

+0

@DavidCunningham你的問題表明,這兩個鏈接的頁面變量是**教程** – 2015-03-25 05:18:11

+0

這是我犯了一個錯誤,當我做了其他人,我只是忘了糾正它。就像現在一樣,我的文章中的所有內容都是正確的。請刷新您的瀏覽器並重新閱讀我的文章?然後你會注意到在鏈接#1和#2中,頁面參數沒有,並且不應該出現在這兩個鏈接的重寫鏈接中,但是空白或空字符串仍然應該發送到我的index.php來表示該變量。在前2個鏈接中沒有$ page = tutorial,前2個鏈接中的$ page變量只應始終包含一個空字符串。所以你建議不起作用! – 2015-03-25 05:24:45