Переписать URL, содержащий пробелы - PullRequest
1 голос
/ 17 ноября 2009

У меня есть URL в следующем формате: domain/product.php?name=product a

Теперь мне нужно переписать это: domain/product a (включая пробел в слове) как: http://www.directline-holidays.co.uk/Costa Blanca

Как мне это сделать? Ближайший результат, который я получил до сих пор, следующий: domain/p/product-a

Со следующим кодом в .htaccess

RewriteEngine On 
RewriteRule ^p/([^/]*)/$ destination.php?name=$1

Я даже не мог использовать имя без "-". Мне нужно название продукта, как оно есть в базе данных. Это возможно?

Ответы [ 4 ]

3 голосов
/ 17 ноября 2009

Это должно сработать: он просто выдаст вам оставшуюся строку URL после каталога / p / до конца строки, что в вашем случае должно быть концом URL, правильно?

RewriteRule ^p/(.*)$ destination.php?name=$1

Для страниц, которые не являются страницами продукта, если вы знаете, что они заканчиваются расширением .php, вы можете отфильтровать эти страницы по следующему правилу:

 RewriteCond %{REQUEST_URI} !^.*(destination\.php).*$ 
 RewriteRule ^([^\.php]+)$ destination.php?name=$1

РЕДАКТИРОВАТЬ: Исправлено для условия бесконечного цикла путем добавления RewriteCond для destination.php

2 голосов
/ 17 ноября 2009

добавьте «% 20» к URL, например:

http://www.directline-holidays.co.uk/Costa%20Blanca

20 в шестнадцатеричном основании - это номер ASCII для пробела.

Edit:

В дополнение к комментарию Powtac:

Используйте функцию JS encodeURIComponent () для кодирования значения, которое должно использоваться в URL: http://www.w3schools.com/jsref/jsref_encodeuricomponent.asp

1 голос
/ 17 ноября 2009

Попробуйте это правила ..

Options +FollowSymLinks
RewriteEngine on
RewriteRule product-name-(.*)\.htm$ product.php?name=$1

или

Options +FollowSymLinks
RewriteEngine on
RewriteRule product/name/(.*)/ product.php?name=$1
RewriteRule product/name/(.*) product.php?name=$1
0 голосов
/ 18 ноября 2009

Вы имеете в виду, что если destination - это php-файл, не переписываете его, иначе переписываете что-нибудь в destination.php? если так, это должно работать

RewriteEngine On
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ destination.php?name=$1
...