htaccess и переписывание URL - PullRequest
       0

htaccess и переписывание URL

0 голосов
/ 27 декабря 2011

У меня есть список URL, например,

http://www.mywebsite.com/page.php?genus=A_GENUS&species=A_SPECIES&id=12345.

Я хотел бы написать .htaccess, который перенаправляет посещения этой формы URL на следующий URL,

http://www.mywebsite.com/species/A_GENUS/A_SPECIES.

Возможно ли это сделать без необходимости вручную перечислять все виды в базе данных?

Я пытался найти его, но моя голова находится на земле WordPress-Custom-Post-Type, и поэтому мой мозг не работает должным образом. Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ: Уточнение

В настоящее время мой .htaccess полностью пуст. Я переписываю свой сайт, чтобы использовать совершенно новую CMS и этот новый формат URL. Старый формат URL перестанет существовать, но вся информация будет по-прежнему использоваться.

Мы весьма высоко ценимся по многим видам в Google, и я хотел бы, чтобы посетители оттуда могли просматривать информацию, которая им требуется, несмотря на изменение формата URL.

Эти изменения еще не произошли (по-прежнему используется среда Sandbox для новой версии сайта), и я хотел бы внести изменения в URL непосредственно перед тем, как я "перейду к жизни" с новой версией.

РЕДАКТИРОВАТЬ 2: Новый сайт .htaccess

Содержимое нового сайта .htaccess выглядит следующим образом:

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

# END WordPress

РЕДАКТИРОВАТЬ для ответа Гармен

RewriteEngine On
RewriteBase /sandboxfolder/
RewriteCond %{QUERY_STRING} genus=([a-zA-Z0-9-]+)&species=([a-zA-Z0-9-]+)
RewriteRule ^profile.php$ /species/%1/%2 [R=302]

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

Не уверен, правильно ли я использовал RewriteBase, но он не работает с ним или без него.

С уважением,

1 Ответ

1 голос
/ 27 декабря 2011
RewriteEngine On
RewriteCond %{QUERY_STRING} genus=([a-zA-Z0-9-]+)&species=([a-zA-Z0-9-]+)
RewriteRule ^page.php$ /species/%1/%2? [L,R=302]

Это предполагает очень специфический порядок параметров строки запроса.Так что будьте осторожны.Также предполагается, что имена содержат только простые буквы, цифры или тире.

Измените 302 на 301, когда вы закончите тестирование.Я использовал 302, потому что 301 агрессивно кэшируются браузерами, что очень затрудняет отладку.

РЕДАКТИРОВАТЬ : Вы должны добавить это выше других ваших правил перезаписи, иначе это не будет работать.*

EDIT 2 : добавлено ? в конце для удаления строки запроса.И L флаг для предотвращения дальнейшего выполнения.

...