2013-06-04 12 views
6

Próbuję utworzyć przyjazne dla SEO maskowane przeróbki w .htaccess. Plik htaccess działa dobrze na lokalnym hoście i moim osobistym serwerze, ale wydaje się niestety nie działa na serwerach GoDaddy. Jestem świadomy, że to już jest problem, ale pracuję dla klienta, który nastawił się na używanie GoDaddy'ego jako swojego gospodarza..htaccess dołączanie ciąg kwerendy do wewnętrznego przekierowania

Problem polega na tym, że przepisanie powoduje wymuszenie przekierowania pokazującego przepisany kod zapytania w pasku adresu przeglądarki zamiast zachowania go w pamięci wewnętrznej. np.

Reguła:

RewriteRule ^/?([a-zA-Z0-9-_/]*)$ /index.php?loadPage=$1&mode=cms [L,QSA] 

Link: /images Przekierowanie do /images/?loadPage=images&mode=cms

ta „powinna” zostać tak /images/ w przeglądarce. Mam skopiowane mój krótki .htaccess poniżej IPS modyfikowane dla bloku rozwoju

<Files .htaccess> 
    deny from all 
</Files> 

Options -MultiViews +FollowSymlinks -Indexes 

RewriteEngine On 
RewriteBase/

# Stop Old redirection from block below 
RewriteCond %{REQUEST_URI} "/old/" 
RewriteRule (.*) $1 [L] 

# Under construction Redirect 
RewriteCond %{REMOTE_ADDR} !^0.0.0.0 
RewriteCond %{REQUEST_URI} !^/?old/ 
RewriteRule ^/?(.*) “/old/$1″ [L,QSA] 

#Admin utilities rewrite 
RewriteRule ^/?admin/?(.*)$ /index.php?loadPage=$1&mode=backend [L,QSA] 

#CMS/Frontend rewrites -- this one is failing 
RewriteRule ^\/?([a-zA-Z0-9-_]+)\/?$ /index.php?loadPage=$1&mode=cms [QSA,L] 

Podpowiedź potencjalnej uwaga jest taka, że ​​wyświetlany adres URL jest /images/?query_string NIE index.php?query_string, więc nie robi pełnego przekierowanie, choć wnioski zewnętrzne otrzymują odpowiedź 301 z żądania strony.

+0

Proszę odnieść się następujące linki lub można również contect wspierać zespół http://support.godaddy.com/groups/web-hosting/forum/topic/problem-using-htaccess-for-url-rewrite/ i http://support.godaddy.com/groups/web-hosting/forum/topic/how-do-i-use-htaccess-to-redirect-my-document-root-and-mask-the-url/? sid = & sp = 1 –

+0

Dziękuję za linki, niestety zbadałem je i żadne z nich nie ma zastosowania w mojej sytuacji. –

Odpowiedz

2

nie mam nic, ale po prostu patrząc na tej linii testowany ...

RewriteRule ^\/?([a-zA-Z0-9-_]+)\/?$ /index.php?loadPage=$1&mode=cms [QSA,L] 

tam jest błąd składni. Łącznik po znaku 9 powinien zostać usunięty technicznie, co jest wskaźnikiem zakresu. Przez większość czasu ludzie umieszczają go na końcu przed numerem ], więc nie powoduje to błędu, więc większość ludzi myśli, że nie muszą tego unikać. Nie musisz także uciekać przed ukośnikami. Używanie znaku zapytania sprawia, że ​​poprzednie jest opcjonalne i nie wiem, dlaczego tego chcesz. Powinno być tak:

RewriteRule ^([a-zA-Z0-9\-_]+)/?$ /index\.php?loadPage=$1&mode=cms [QSA,L] 
+0

Opcjonalny slash zamykający jest taki, że niektóre "fantastyczne" dodatki do przeglądarki usuwają końcowy ukośnik z linków, jeśli nic nie występuje po slashu (co ma związek z bezpieczeństwem). Co dziwne, przepisanie działa poprawnie, jeśli uzyskam dostęp z końcowym ukośnikiem, ale nie zadziała, jeśli nie istnieje. Oryginalne przepisywanie przez administratora robi to samo (tylko mniej wybredne) i działa idealnie, więc myślę, że na coś, co interpretuje wartości dopasowania.Zrobię trochę więcej zabawy z tym. (niestety sugerowane zmiany nie zmieniły problemu). –

+0

Dodałem przekierowanie 301 dla wszystkich linków przychodzących, które nie mają końcowego slasha, aby je dołączyć, i otrzymałem reguły działające tak, jak chcę. Wolałby mieć to opcjonalne w jednej zasadzie, ale działa co najmniej, lol. Dzięki za ustawienie mnie na właściwej drodze! –

0

Skomentowałem niektóre z pozostałych zasad, dzięki czemu można powiedzieć, co się dzieje. Brałeś wszystko, co nie zaczynało się od "starego" i przepisałeś je do starego katalogu. Powyższa reguła wygląda tak, jakbyś zabierał wszystko, gdzie znalazłeś słowo "/ old /" i przekierowywałeś je do siebie. Nie należy już otrzymywać żadnych żądań od użytkownika 0.0.0.0.

Łącznik w ostatniej regule musi znajdować się na końcu nawiasów, aby Apache nie szukał zasięgu.

Ponieważ mamy do czynienia z .htaccess, nie potrzebujemy poprzednich ukośników, jeśli nie używamy REQUEST_URI.

RewriteEngine On 
RewriteBase/

# Stop Old redirection from block below 
RewriteCond %{REQUEST_URI} ^/old/(.*)$ 
RewriteRule .* %1 [L] 

# Under construction Redirect 
# RewriteCond %{REMOTE_ADDR} !^0.0.0.0 
# RewriteCond %{REQUEST_URI} !^/?old/ 
# RewriteRule ^/?(.*) /old/$1 [L,QSA] 

#Admin utilities rewrite 
RewriteRule ^admin/(.*)$ index.php?loadPage=$1&mode=backend [L,QSA] 

#CMS/Frontend rewrites 
RewriteCond %{REQUEST_FILENAME} !^index.php$ 
RewriteRule ^([A_Za-z0-9_-]+)/?$ index.php?loadPage=$1&mode=cms [QSA,L] 
+0

Adres IP 0.0.0.0 jest symbolem zastępczym dla adresu IP, z którego uzyskuję dostęp do serwera. Zgadzam się, jestem trochę leniwy z łącznikiem, jednak Apache może normalnie to rozgryźć, ponieważ nie ma następujących znaków zakresu. Przetestowałem te zmiany i niestety problem nadal występuje. Też skomentowałem każdą regułę inną niż RewriteEngine, i przepisywanie frontendu, i wciąż ten sam wynik, więc nie wydaje się być konfliktem reguł. –

Powiązane problemy