2012-07-20 42 views
0

我需要一點幫助。用htaccess和mod_rewrite忽略/接受正斜槓

我正在製作一個php頁面,它收集查詢字符串,根據數據庫對匹配項進行測試,然後將用戶重定向到網站的其他部分。

的是如何工作的目前(不htaccess的/ mod_rewrite的):

  1. 用戶訪問:domain.com/redirect/index.php?slug=Test_1
  2. PHP頁面進行消毒,並查找「 Test_1'並檢索目標URL以將用戶重定向到。 (例如domain.com/New_Test_1)
  3. 然後,php頁面301會相應地重定向。

這部分工作正常。然而,由於我無法控制的一些變數,我需要(使用htaccess的/ mod_rewrite的)解釋原始URL,就像這樣:

  • domain.com/redirect/index.php/Test_1

仍然充當一樣:

  • domain.com/redirect/index.php?slug=Test_1

(注:是的,在index.php需要ST 。唉url中)

我有這個在我的htaccess下面的工作,但我知道這可能是更好的:

RewriteEngine On 
Options +FollowSymLinks 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/(.*)$ %{DOCUMENT_ROOT}/redirect/index.php?slug=$2 [PT,L,QSA] 

部分我需要幫助...

一些舊的URL蛞蝓有向前他們斜槓,像這樣:

  • domain.com/redirect/index.php?slug=How_to_Code/Program

沒有htaccess的,上面仍然有效,但無法用漂亮的(IER)網址:

  • domain.com/redirect/index.php/How_to_Code/Program

與我目前的htaccess,它只捕獲'How_to_Code'部分,但忽略它後面的所有內容。

所以我的問題是這樣的:我如何重構我的htaccess來抓取domain.com/redirect/index.php/(.*)$之後的所有內容,包括正斜槓?

編輯:這個。htaccess的會內/重定向目錄

回答

0

如果你這樣做

RewriteRule ^redirect/index.php/([a-zA-Z0-9/_]+)$ redirect/index.php?slug=$1 

將接受正斜槓和下劃線。要添加允許的字符,只需將它們添加到[]方括號內即可。某些字符可能需要轉義,所以只需Google即可。

+0

感謝大衛,這個.htaccess進入/ redirect目錄。我試過你的規則,但是捕獲($ 1)沒有返回任何結果。有任何想法嗎? – stealthify 2012-07-20 12:51:42

+0

如果它在您的重定向目錄中,那麼只需將 'RewriteRule^index.php /([a-zA-Z0-9/_] +)$ index.php?slug = $ 1' 這將重定向到索引。 php文件在重定向文件夾中,同時保持URL像www.yoursite.com/redirect/index.php/Some_value – David 2012-07-20 13:13:25

+0

你讓我到我需要去的地方。我結束了使用 'RewriteRule^index.php /(.+)$ index.php?slug = $ 1 [PT,L,QSA]' 只是因爲有很多字符的可能性(不僅僅是正斜槓) 。這樣做有任何安全問題嗎? – stealthify 2012-07-20 13:25:35