2012-08-05 51 views
1

我有此鏈接:正則表達式匹配第一個斜槓的網址,以獲取一切後

http://mysite.com/subdirectory/something/stuff/index.php 

我將能夠使用,只有第一個斜槓,這樣我能背後抽出一切符合什麼正則表達式它使用表示找到的項目的$ 1或$ 2變量?這樣它會返回「子目錄/ something/stuff/index.php」。

例如,我想用這個正則表達式:

(.*)/(.*) 

但是,不斷重複,每個斜線所以它只會URL的返回最後一部分(在這種情況下的index.php)當我使用港幣$ 16。

我使用的語言是apache(?),它會在.htaccess文件中。

在此先感謝!

編輯: 好了,所以在這個背景是,我在子目錄中的一些文件鏈接到使用像「/files/test.php」鏈接其他文件,因爲這些文件預計,其他目錄是在根文件夾中,但在我的網站上,他們不是。所以我想使用htaccess文件將這些請求重定向到根文件夾到子目錄,以便一切正常。並且替換所有鏈接不是一種選擇,因爲它們有一千多個。

回答

1

試試這個正則表達式(它會重定向到子目錄的東西只有在請求的文件不存在,所以如果它存在它不會循環infinitly):

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ sub/stuff/$1 [NC,L,R=301] 
+0

當我使用$ 1時,我最終處於無限重定向循環。當我使用$ 2的時候,所有的結果都是「index.php」,而不是完整的路徑。 – Qub1 2012-08-05 00:41:30

+0

我認爲你得到無限循環的問題是你需要添加一個RewriteCond,因爲你想將包含/的東西重定向到另一個包含/的東西。我錯了嗎 ? – Oussama 2012-08-05 00:43:19

+0

我認爲你可能是對的,至少部分。但是我對RewriteCond值並不熟悉,因爲我對apache語言相當陌生,所以我究竟會進入那裏?我已經爲此工作了2天,但我無法弄清楚我必須做什麼。此外,不會$ 1只是返回到我的網站的鏈接,在這種情況下,「http://mysite.com」 – Qub1 2012-08-05 00:49:19

2

你的正則表達式貪婪(.*)。嘗試使第一部分非貪婪:

(.*?)/(.*) 
+0

沒有出於某種原因,不會爲我工作,我最終只有「的index.php」當我使用$ 2你的正則表達式。 – Qub1 2012-08-05 00:43:02

+0

對於您的示例網址,您是否可以提供「$ 1」和「$ 2」的相應值? – Blender 2012-08-05 00:43:37

+0

那麼當你使用正則表達式時,$ 1和$ 2的值取決於使用正則表達式字符串找到的值,因此在這種情況下,$ 1將匹配在正則表達式中使用「(。*?)」找到的部分,即http: //mysite.com在我的鏈接中,$ 2會匹配在「(。*)」中找到的內容,這應該是鏈接中的「子目錄/ something/stuff/index.php」,但不是出於某種奇怪的原因。 – Qub1 2012-08-05 00:47:44

0
^(https?:\/\/[^\/]*\/)(.*) 

第二組將包含你在找什麼

相關問題