2013-04-08 34 views
1

我有一個Joomla網站上的幾個網址已被編入索引,我需要301重定向到一些新的網頁。舊的URL形成這樣的:301重定向 - 在舊網址中的變量

http://www.mydomain.com/en/wfmenuconfig/family/family-disease/177-category-english?start=20

我想它去:

http://www.mydomain.com/en/family-members/family-disease

我試着使用:

RewriteCond %{QUERY_STRING} ^start=(.*)$ 
RewriteRule ^/en/wfmenuconfig/family/family-disease/177-category-english$ http://www.www.mydoamin.com/en/family-members/family-disease%1 [R=301,L] 

我試過幾個答案在這裏,但似乎沒有任何工作。

htaccess 301 redirect dynamic url

301 Redirecting URLs based on GET variables in .htaccess

任何想法,我應該嘗試下? (我試過一個正常的重定向301)

+0

安置自己的最佳猜測的解決方案爲出發點。 – isherwood 2013-04-08 16:06:35

+0

我試着使用:(。*) '的RewriteCond%{QUERY_STRING} ^開始= $ 重寫規則^/EN/wfmenuconfig /家庭/家族疾病/ 177類,英語$ HTTP://www.www .mydoamin.com/en/family-members/family-disease%1 [R = 301,L]' – 2013-04-08 16:08:59

+0

看看這個:[使用.htaccess或工具修改自定義網址](http://stackoverflow.com/questions/ 15634494 /的Joomla-2-5-適應定製的URL與 - htaccess的-或工具/ 15654818#15654818)。比搞亂.htaccess更方便 – 2013-04-09 08:06:11

回答

0

你已經差不多了。

RewriteCond %{QUERY_STRING} ^start=(.*)$ 
RewriteRule ^en/wfmenuconfig/family/family-disease/177-category-english$ /en/family-members/family-disease%1? [R=301,L] 

你也不需要http://www.www.mydoamin.com位(2套www):從一個htaccess文件應用規則時,您需要從規則的圖案去掉前導斜槓,因爲它是從URI中刪除。在您的目標結束時,您有family-disease%1,這意味着如果start=20那麼您的網址的結尾將如下所示:family-disease20。是對的嗎?

+0

我真的不想在重定向的url結尾處有20個。 – 2013-04-09 11:16:25

+0

@AndrewMatthews然後刪除末尾的'%1' – 2013-04-09 16:23:39

+0

嗨,喬恩,謝謝你的回覆。我試過你的規則,重定向不起作用。我也離開它來檢查它是否工作,並且仍然沒有重定向。 – 2013-04-10 07:50:22

0

新的網址沒有查詢字符串,所以它只是剝離最後的URL路徑部分。如果你希望它硬編碼

RewriteCond %{QUERY_STRING} ^start= 
RewriteRule ^en/wfmenuconfig/family/family-disease/177-category-english$ /en/family-members/family-disease? [R,L] 

還是有點更靈活

RewriteCond %{QUERY_STRING} ^start= 
RewriteRule ^en/wfmenuconfig/family/family-disease/.+$ /en/family-members/family-disease? [R,L] 

,或者如果你只是想保持兩個級別後en/wfmenuconfig

RewriteCond %{QUERY_STRING} ^start= 
RewriteRule ^en/wfmenuconfig/(.+?/.+?)/ /en/$1? [R,L] 

決不301測試啓用,請參閱詳情請參閱Tips for debugging .htaccess rewrite rules

0

如果你只是想http://www.mydomain.com/en/wfmenuconfig/family/family-disease/177-category-english?start=$var重定向到http://www.mydomain.com/en/family-members/family-disease,那麼你一定要試試這些指令:

# once per .htaccess file 
Options +FollowSymlinks 
RewriteEngine on 

RewriteCond %{QUERY_STRING} start=([0-9]*) 
RewriteRule ^en/wfmenuconfig/family/family-disease/177-category-english /en/family-members/family-disease [R=301,L] 

但是,如果這不是你想要的,但http://www.mydomain.com/en/wfmenuconfig/family/family-disease/177-category-english?start=$var重定向到http://www.mydomain.com/en/family-members/family-disease$var那麼你可以檢查此一:

# once per .htaccess file 
Options +FollowSymlinks 
RewriteEngine on 

RewriteCond %{QUERY_STRING} start=([0-9]*) 
RewriteRule ^en/wfmenuconfig/family/family-disease/177-category-english /en/family-members/family-disease%1 [R=301,L] 

現在,給這一個多一點嘗試,如果它會工作。如果不是,那麼發現任何可疑爲什麼這個代碼不工作:

Options +FollowSymlinks 
RewriteEngine on 
RewriteBase /en/ 

RewriteCond %{QUERY_STRING} start=([0-9]*) 
RewriteRule ^wfmenuconfig/family/family-disease/177-category-english /family-members/family-disease [R] 

,並轉到http://www.mydomain.com/en/wfmenuconfig/family/family-disease/177-category-english?start=$AnyNumber如果它重定向到http://www.mydomain.com/en/family-members/family-disease只要確保你的Web服務器有mod_rewrite的

+0

試過這一個,我得到了一個服務器500錯誤。 – 2013-04-09 11:22:54

+0

@AndrewMatthews請再試一次,因爲我已經修改過了。 – 5ervant 2013-04-09 11:28:48

+0

嗨僕人,感謝您的時間,我再次嘗試,但它沒有奏效。 – 2013-04-09 11:51:03

0

我只是想扔掉那裏,我也無法讓RewriteRule工作。我有一個客戶端從.asp頁面升級到WordPress支持的站點。我需要做的是在「#BEGIN WordPress」部分之前將RewriteCond和RewriteRule插入到htaccess文件中。現在它就像它應該那樣工作。

這是張貼的方式,但希望它可以幫助其他人在那裏遇到同樣的問題。

不起作用:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 
RewriteCond %{QUERY_STRING} ^var=somestring$ [NC] 
RewriteRule ^oldpage\.asp$ http://www.domain.com/newpage? [R=301,L] 

不工作:

RewriteCond %{QUERY_STRING} ^var=somestring$ [NC] 
RewriteRule ^oldpage\.asp$ http://www.domain.com/newpage? [R=301,L] 
# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 

操作的順序一定是重要的=)