2015-02-23 2 views
-1

У меня есть страница, которая имеет ссылку как:Htaccess RewriteRule с параметрами для конкретного места

http://www.example.com/listings.php?packageType=luxury-travel 

который я хотел бы отправить:

http://www.example.com/luxury-travel 

А также:

http://www.example.com/listings.php?packageType=luxury-travel&packageTypeSub=remote-luxury-retreats 

Перейдите к:

http://www.example.com/luxury-travel/remote-luxury-retreats 

Я использовал:

RewriteEngine On 
RewriteRule ^([^/]*)/([^/]*)$ /listings.php?packageType=$1&packageTypeSub=$2 [L] 

который заканчивается влияя на другие страницы, которые у меня есть такие, как:

http://www.example.com/about-us 

Я также попытался размещения:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

Перед. Также попытался сыграть с:

RewriteCond %{QUERY_STRING} ^packageType=([^&]+) [NC,OR] 
RewriteCond %{QUERY_STRING} &packageType=([^&]+) [NC] 
RewriteRule ^([^/]*)$ /listings.php?packageType=$1 [L] 

Который только что дал мне ошибку 404 по обеим ссылкам. У кого-нибудь есть идеи? Считалось бы, что это было бы просто!

ответ

0

В файле .htaccess

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?([^\.*]+)/([^\.*]+)/?$ listings.php?packageType=$1&packageTypeSub=$2 [L,QSA] 
RewriteRule ^/?([^\.*]+)/?$ listings.php?packageType=$1 [L,QSA] 
+0

Благодарим за помощь. попробовал это, но, похоже, не работал. Вызванная ошибка на других страницах, таких как/контакт и т. Д. Также не работала полностью для таких ссылок, как: http://www.example.com/luxury-travel/remote-luxury-retreats –

+0

Изменить: удалось получить работа хорошо, но есть проблемы с другими ссылками? Редактировал оригинальный пост. –

0

Попробуйте это:

RewriteEngine on 

RewriteCond %{THE_REQUEST} \ /+listings\.php\? [NC] 
RewriteCond %{QUERY_STRING} (?:^|&)packageType=([^&]+)&packageTypeSub=([^&\s]+) [NC] 
RewriteRule^/%1/%2? [R=301,NC,L] 

RewriteRule ^([^/]+)/([^/]+)?$ /listings.php?packageType=$1&packageTypeSub=$2 [L] 

Обратите внимание, что если только packageType доступна, правила будут перенаправлять на http://www.example.com/luxury-travel/ (обратите внимание на / в конце), чтобы помочь отличить его от ссылок, таких как http://www.example.com/about-us.

Если это не вариант, вы должны добавить правила, в которых конкретно указаны имена страниц и ссылок.

+0

Спасибо Рави. Я закончил тем, что получал прямые циклы с этим. –

+0

@IanFraser Пожалуйста, попробуйте обновление. –

+0

Спасибо Рави. Я тестировал его, и он тоже работает. У меня есть проблема.Я должен был упомянуть, что у меня есть и другие страницы, которым необходимо руководствоваться: http://example.com/location.php?place=vancouver to http://example.com/vancouver Также мне нужно работать над: http://example.com/product.php?packageType=luxury-travel&id=42 to http://example.com/luxury-travel/private-touring/product-name/42 –

0

Я отредактировал и удалил часть кода разработки, поскольку он не работал.

После долгого headscratching я наконец-то нашел решение, которое работает:

# Rewrite specific pages - listings 
# Allow packageType 
RewriteCond %{THE_REQUEST} \ /+listings\.php\? [NC] 
RewriteCond %{QUERY_STRING} (?:^|&)packageType=([^&]+) [NC] 
RewriteCond %{QUERY_STRING} !&packageTypeSub=([^&]+) 
RewriteRule^/%1/? [R=301,NC,L] 

# Allow packageTypeSub 
RewriteCond %{THE_REQUEST} \ /+listings\.php\? [NC] 
RewriteCond %{QUERY_STRING} (?:^|&)packageType=([^&]+)&packageTypeSub=([^&\s]+) [NC] 
RewriteRule^/%1/%2? [R=301,NC,L] 

# Ignore the images folder allowing images to display 
RewriteCond %{REQUEST_URI} !(upload-images) [NC] 
RewriteRule ^([^/]+)/([^/]+)?$ /listings.php?packageType=$1&packageTypeSub=$2 [L] 

Основная проблема была папкой Upload-изображения, который содержит все изображения для пакетов сайта были заблокированы. Мне удалось исключить эту папку из правил перезаписи, и теперь она работает. Спасибо всем за вашу помощь. Надеюсь, это поможет кому-то еще в будущем.

+0

Отлично, что вы нашли решение! Однако лучше сохранить исходный вопрос и опубликовать решение в качестве ответа. Таким образом, люди с подобной проблемой могут найти свою проблему (ваш вопрос) и увидеть решение. –

+0

Привет, Ли, я держал в исходном вопросе, просто удалил некоторые изменения, которые я добавил, которые были бесполезны;) –

+0

Я вижу. Но часть слова * Решение * до конца поста не входит в вопрос. Это ответ, и хороший, по-видимому (это сработало для вас :)). SO поощряет отвечать на ваш собственный вопрос, и вы даже можете выбрать его как принятый ответ. –

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