2011-12-26 62 views
1

我發現了一個類似於我的問題的問題(Regular Expression For URL Query),但無法讓我的問題得到解決。URL重寫的正則表達式

所以我在HTACCESS中正則表達式遇到問題。

因此,我在我的網站是:

ROOT:(我的Web根是在子文件夾中的網站')

/sites/index.php和其他文件

/網站/網站/ sample_folder_name/

現在我想的事是重寫URL:

/網站/網站/ sample_folder_name/file_name.php

到:

/網站/ file_name.php siteredirect = sample_folder_name

記住: 如果URL中包含任何請求參數,那麼這些參數也必須重新編寫,即:

示例:

/位點/位點/ sample_folder_name/file_name.php CAT_ID = 1 &用戶= 2

到:

/位點/ file_name.php CAT_ID = 1 &用戶= 2 & siteredirect = sample_folder_name

參數應該是未知的,而不是user和cat_id。它可以是任何參數。意味着無論在.php之後寫入的內容都應該在URL中。

方式:?

/網站/網站/ sample_folder_name/file_name.php if_any_parameters

則:

/網站/ file_name.php if_any_parameters & siteredirect = sample_folder_name

否則:

/網站/ file_name.php?siteredirect = sample_folder_name

目前,重寫是偉大的工作,但我不能讓他們帶參數運行。

我有什麼在我的.htaccess現在:

RewriteRule ^sites\/([0-9A-Za-z_]+)\/([0-9A-Za-z_]+)\.php(.*)$ $2.php(?(?=$3)$3&)siteredirect=$1 [L] 
RewriteRule ^sites\/([0-9A-Za-z_]+)\/$ index.php?siteredirect=$1 [L] 

在此之後,它給我一個404

請幫助...我在哪裏做錯了!

回答

0

您需要QSA標誌(查詢字符串追加):

RewriteRule ^sites(/sites/[^/]+)/([^/]+)$ $1?siteredirect=$2 [QSA] 

更重要的是,反轉您的規則:你將不必使用L

而且,考慮使用<Location>指令,它會讓你的工作更輕鬆:

<Location "/site/site"> 
    #rules here 
</Location> 

<LocationMatch "^/site/(?!site/)"> 
    #rules here 
</Location>