2012-10-25 14 views
15

Udało mi się masowo przenieść witrynę Wordpress do Drupala. Niestety w Wordpress adresy URL treści były podobne do www.example.org/?p=123. Moja domena jest wciąż taka sama, ale chcę wykonać przekierowanie przez htaccess, ponieważ Drupal nie zezwoli na URL-a na www.example.org/?p=123. Innymi słowy, treść nie ma takiego samego adresu URL jak w Wordpress. Na przykład, nowy Drupal URL byłoby coś podobnego www.example.org/content/MyNewPageJak przekierować adresy URL na podstawie ciągu zapytania?

Próbowałem to w moim pliku .htaccess i nie działa

Redirect 301 /\?p=375 http://www.example.org/content/MyNewPage 

Więc starałem poniżej, ale to nie działa albo.

Tak jak test, spróbowałem poniżej i zadziałało.

Redirect 301 http://www.example.org http://www.google.com 

Upewniłem się, że moja reguła przekierowania znajduje się na górze listy w moim pliku .htaccess, więc najpierw zostanie oceniony. Jak to naprawić?

Odpowiedz

29

ani Przekierowanie, ani RedirectMatch nie pozwala na określenie ciągu zapytania dla źródła przekierowania. [Source]

Musisz użyć mod-rewrite na przekierowanie na podstawie ciągu kwerendy:

RewriteCond %{QUERY_STRING} ^p=375$ 
RewriteRule (.*) http://www.example.org/content/MyNewPage? [R=301,L] 
+0

Niestety zostaje przekierowany do strony 404 nie znaleziono, a mój adres URL nadal jest zablokowany i pokazuje http://www.example.org/?p=375. Mogę potwierdzić, że "content/MyNewPage" istnieje i działa. Mogę również potwierdzić, że moje RewriteRules działają, ponieważ działają poprawnie w Drupal. – user785179

+0

Wyczyść pamięć podręczną przeglądarki i spróbuj ponownie, pamięć podręczna przeglądarek '301 Permanentne przekierowanie' ' – undone

+0

Dobra sugestia, ale teraz Firefox mówi, że przekierowuje jako niekończąca się pętla. "Firefox wykrył, że serwer przekierowuje żądanie dla tego adresu w sposób, który nigdy się nie zakończy." Adres URL zaczyna się od http://www.example.org/content/MyNewPage?p=375 – user785179

1

można rozważyć używać ModRewrite w htaccess

<IfModule mod_rewrite.c> 

RewriteEngine On 

RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{QUERY_STRING}  ^p=345$ [NC] 
RewriteRule index.php content/MyNewPage [NC,L,R=301] 

</IfModule> 

I ty też może chcieć przekazać stary identyfikator strony do nowego adresu URL połączonego (a może przez QS?):

<IfModule mod_rewrite.c> 

RewriteEngine On 

RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{QUERY_STRING}  ^p=(.*)$ [NC] 
RewriteRule index.php content/MyNewPage-%1 [NC,L,R=301] 

</IfModule> 
+0

Próbowałem twojej metody, ale dostaję się do strony błędu 404. – user785179

Powiązane problemy