2015-06-05 121 views
1

下面是我在我的htaccess現在:如何正確重定向多個URL用的.htaccess

Options +FollowSymlinks 
RewriteEngine on 
RewriteBase /themelink/mytheme 
RewriteRule ^(.+)$ http://portal.example.com/aff.php?aff=$1&p=mytheme.php [R=301,NC] 

我有這樣的.htaccess地處/themelink/mytheme目錄。

這樣做是重定向有人去http://example.com/themelink/mytheme/123456到URL http://portal.example.com/aff.php?aff=123456&p=mytheme.php

這幾乎是我想要做的,但在那裏我想它但它不是相當。

我想要做的是將.htaccess放在我的themelink目錄中,並讓它識別URL後面的任何文件夾名稱,而不必爲每個主題創建單獨的文件夾。

例如,這裏的幾集的鏈接,我想工作:

http://example.com/themelink/new-theme/5643434 ---> http://portal.example.com/aff.php?aff=5643434&p=new-theme.php

http://example.com/themelink/bloggertheme/254543 ---> http://portal.example.com/aff.php?aff=254543&p=bloggertheme.php

http://example.com/themelink/test-theme/4353663 --- > http://portal.example.com/aff.php?aff=4353663&p=test-theme.php

我可以在技術上做到這一點只是c爲每個需要重定向設置的主題重新創建一個新目錄,並僅使用上面的.htaccess,但我更願意擁有一個僅適用於所有主題的.htaccess。

希望這是有道理的,請隨時讓我知道是否需要澄清。

回答

2

如果我理解正確,你可以移動的.htaccess了一個級別到/themelink目錄下,並修改它包括兩個()捕獲組,第一組拍攝的一切行動所遇到的第一個/,第二捕捉一切之後。

# .htaccess in /themelink 
Options +FollowSymlinks 
RewriteEngine on 
# Change the RewriteBase (it actually isn't even needed) 
RewriteBase /themelink 
# $1 is the theme name, $2 is the aff value 
RewriteRule ^([^/]+)/(.+)$ http://portal.example.com/aff.php?aff=$2&p=$1.php [R=301,NC] 

表達([^/]+)一個或多個字符是一個/並捕獲它作爲$1匹配。

現在,我注意到所有示例中的aff值都是數字。如果是這樣的話,我會建議重寫一些更具體的匹配數字,而不是匹配任何東西的(.+)。這樣,一個無效的URL(數字以外的東西)將不會重定向,而是可以使用404響應。

# Ensure $2 is an integer with `\d+` (one or more digits) 
RewriteRule ^([^/]+)/(\d+)$ http://portal.example.com/aff.php?aff=$2&p=$1.php [R=301,NC]