Как перенаправить URL с параметрами? - PullRequest
0 голосов
/ 14 июня 2011

Я в полной растерянности пытаюсь интегрировать mod_rewrite в мою существующую страницу.В настоящее время я создаю новый сайт с нуля, и там у меня есть несколько хороших чистых URL-адресов, таких как:

http://www.example.nl/nl/example

Старый сайт, на котором запущены простые Cms, имеет несколько не переписанных URL-адресов, которые необходимобыть перенаправлены на новые страницы.Эти URL выглядят так:

http://www.example.nl/index.php?page=cake-and-pie&hl=nl_NL

Но более короткие версии этого типа:

http://www.example.nl/index.php?page=cake-and-pie

также работают.

Мне потребовалось некоторое время, чтобы выяснить, что URLс параметрами нельзя просто перенаправить с помощью «Redirect 301», как я обычно это делал.Поэтому я попробовал некоторые онлайн-генераторы mod_rewrite, такие как this и this , но правила, выводимые ими, приводят только к 404 ошибкам (перенаправление вообще не работает).

Мой текущий файл .htaccess выглядит так:

RewriteEngine On
RewriteBase /

# remove .php;
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]

# remove index
RewriteRule (.*)/index$ $1/ [R=301]

# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]

# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

Старые страницы могут быть сохранены.Как перенаправить старые страницы на новые?

Спасибо.

РЕДАКТИРОВАТЬ

RewriteCond %{QUERY_STRING} =page=pie
RewriteRule ^index\.php$ /nl/? [L,R=301]
RewriteCond %{QUERY_STRING} =page=pie&hl=nl_NL
RewriteRule ^index\.php$ /nl/? [L,R=301]

Кажется, чтобы сделать трюк.Это, конечно, руководство для каждого URL, но у меня есть только несколько.

1 Ответ

0 голосов
/ 14 июня 2011
RewriteEngine On
RewriteBase /
RewriteRule ^(.+)/([^/]+)/?$    index.php?page=$1&hl=$2
RewriteRule ^([^/]+)/?$         index.php?page=$1 [QSA]
...