Mam problem z uzyskaniem mojej .htaccess ReWrite do pracy na moim serwerze WWW Apache. Przeczytałem kilka samouczków i przetestowałem dopasowanie wyrażeń regularnych z Grepem.
Oto kod:
RewriteRule ?action=viewArticle&articleId=([0-9]*)&categoryId=([0-9])$ essays/$1 [R=301,L]
oto adres URL, który próbuję dopasować:
http://mysite.com/?action=viewArticle&articleId=15&categoryId=1
i zmień na
http://mysite.com/essays/15
AKTUALIZACJA: Rozwiązanie! z bardzo doskonały tutorial od Jona. To było bardzo ważne, że położyłem <base href="/">
w moim pliku nagłówkowym, aby css działał poprawnie.
Ostateczne przepisanie wyglądało następująco:
RewriteCond %{THE_REQUEST} /?action=viewArticle&articleId=([0-9]*)&categoryId=([0-9])
RewriteRule ^$ /essays/%1? [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^essays/([0-9]+) /?action=viewArticle&articleId=$1&categoryId=([0-9]) [L]
Odpowiedzi:
2 dla odpowiedzi № 1Nie można dopasować hostów ani ciągów zapytań w pliku RewriteRule
, musisz dopasować do %{HTTP_HOST}
i %{QUERY_STRING}
zmienne w a RewriteCond
dyrektywa:
RewriteCond %{HTTP_HOST} mysite.com$ [NC]
RewriteCond %{QUERY_STRING} ^action=viewArticle&articleId=([0-9]*)&categoryId=([0-9])$
RewriteRule ^$ /essays/%1? [L,R=301]
Spowoduje to przekierowanie przeglądarki (zmiana adresu URL na pasku adresu), gdy ktoś do niej przejdzie http://mysite.com/?action=viewArticle&articleId=15&categoryId=1
do http://mysite.com/essays/15
Nie potrzebujesz tego %{HTTP_HOST}
warunek, jeśli plik htaccess obsługuje tylko jeden host.