2011-12-27 2 views
0

У меня есть список URL-адресов, таких как,Htaccess и 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, и поэтому мой мозг работает неправильно. Любая помощь будет принята с благодарностью.

EDIT: Разъяснение

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

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

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

EDIT 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 

EDIT для ответа Garmen в

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

В чем состоит ваш htaccess? Старинный url все еще работает? Является ли новый URL-адрес уже переписан (внутренним) на старый? – Gerben

+0

Извините, Гербен, я обновлю свой пост соответственно. – dunc

+1

Будет ли новый CMS не использовать какой-либо htaccess? Всегда ли параметры url в этом порядке, когда ссылки созданы на старом сайте? – Gerben

ответ

1
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: Вы должны добавить это выше других правил перезаписи, которые у вас есть, или это не сработает.

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

+0

Это имеет смысл в моей голове и выглядит идеально, я надеюсь! Я отдам его сейчас. Большое спасибо за вашу помощь Gerben - как только у меня была игра, я обязательно получу правильный ответ :) – dunc

+1

Привет, снова Garben. Он работает, но добавляет дополнительную информацию по URL-адресу: '/ species/Parasphaerichthys/lineatus? Genus = Parasphaerichthys & species = lineatus & id = 1565' – dunc

+0

Кроме того, при использовании выше моих правил WordPress код, похоже, не работает в все. Это потому, что WordPress переписывает все файлы, которые не являются «index.php», на страницу индекса? Тем не менее, я поместил код выше этих правил, как вы указали, но правила WordPress по-прежнему имеют приоритет. Я обновлю свое оригинальное сообщение, чтобы показать вам, как я написал файл .htaccess, если он ошибается. – dunc

Смежные вопросы