линк замяна с .htaccess

noxious

Registered
Здрасти!
Как може това:
products.php?cat_id=1&type=1&min=11&max=142&page=2
При submit от формата вместо горния линк да избира този по-долу:
products/1/1/price[11,142]/2

PHP:
<div class="container" style="padding-top: 5%; padding-bottom: 5%;">
	<p style="text-align: center;">
		<input type="text" id="amount" readonly style="border: 0; font-weight: bold;" />
	</p>
	
	<div id="slider-range"></div>
	
	<form id="priceRangeForm" method="get">
		<input type="hidden" name="cat_id" value="<?php echo $_GET['cat_id']; ?>" />
		<input type="hidden" name="type" value="<?php echo $_GET['type']; ?>" />
		<input type="hidden" name="min" id="min" value="<?php echo (isset($_POST['min'])) ? $_POST['min'] : '1'; ?>" />
		<input type="hidden" name="max" id="max" value="<?php echo (isset($_POST['max'])) ? $_POST['max'] : '200'; ?>" />
	</form>
</div>
 
Код:
RewriteEngine On
RewriteRule ^product/([0-9]+)/([0-9]+)/price\[([0-9])\,([0-9])\]/([0-9]+)/?   products.php?cat_id=$1&type=$2&min=$3&max=$4&page=$5

Нещо такова, това ще отговаря на точни урл, но имай предвид, че ако искаш да достъпиш продукта БЕЗ филтъра за цена и/или БЕЗ стрница, няма да сработи.
- Защо ? - защото гет променливите са ОПЦИОНАЛНИ и трябва да не са ключова част от урл. Затова и е прието да се записват с ? . Малко не ме разбра, но ето пример как би трябвало да стане коректно:
Product/cat-1/type-1?price=0,255&page=2

Ако един урл МОЖЕ да съществува без да са заадени тея Get параметри, значи е коректен, ако не е ще трябва да направиш по един ред в htaccess за всеки вариант, без странициране, със price ранге и кво ли още не. Но това ще го видиш с практика, сега мога да напиша още много, но едва ли ще запомниш всичкото и едва ли ще го разбереш от първия път. Пробвай и виж кое работи за теб, ще видиш, че докато завършиш проекта си, ще смениш урл-ите поне още 2-3 пъти :) :?:
 
Мисля, че нещо подобно на това трябва да е:

form action="searchRURI"

Код:
RewriteCond %{REQUEST_URI} searchRURI$
RewriteCond %{QUERY_STRING} ^text=(.*)$
RewriteRule ^(.*)$ /search/%1/1? [R=301,L]
RewriteRule ^search/(.+?)/(.+?)/?$ ./search.php?text=$1&page=$2

Но не знам как с няколко променливи
 
Виж това:

Код:
RewriteRule ^products/(\d+)/(\d+)/price\[(\d+),(\d+)]/(\d+) products.php?cat_id=$1&type=$1&min=$3&max=$42&page=$5

Превръща това:

http://hostname/products/1/1/price[11,142]/2
в това:
http://hostname/products.php?cat_id=1&type=1&min=11&max=&page=2

Тествано и работи тук: http://htaccess.mwl.be/
 
noxious каза:
Стана, но как самата formа да submit-ва това URL.
Не може (поне аз не съм чувал за такова нещо). Когато браузърът изпраща форма с метода ГЕТ, следвайки някакъв стандарт съставя това урл (?param=val&param2=val2).

Аз виждам 2 неща, които можеш да направиш:
1. С htaccess да пренасочиш от /products.php?cat_id=... към /products/cat_id/page_id...

2. С js да прихванеш изпращането на формата и ръчно да пренасочиш потребителя към опростения урл.

Аз лично бих направил 2., защото с 1. ще имаш 2 http request-а.
 
Как мога да добавя за една страница няколко правила?

Например тук искам
Код:
RewriteRule ^productstest/type-(.+?)/category-(.+?)/page-(.+?)\/?$ ./products_test.php?type=$1&cat_id=$2&page=$3
RewriteRule ^productstest/type-(.+?)/category-(.+?)/price-\[(.+?),(.+?)]\/?$ ./products_test.php?type=$1&cat_id=$2&min=$3&max=$4
RewriteRule ^productstest/type-(.+?)/category-(.+?)/price-\[(.+?),(.+?)]/page-(.+?)\/?$ ./products_test.php?type=$1&cat_id=$2&min=$3&max=$4&page=$5

тук искам без page да може да се отваря също, както е направен самия линк
Код:
RewriteRule ^products/type-(.+?)/category-(.+?)/page-(.+?)\/?$ ./products.php?type=$1&cat_id=$2&page=$3

тук също да може без page
Код:
RewriteCond %{REQUEST_URI} searchRURI$
RewriteCond %{QUERY_STRING} ^text=(.*)$
RewriteRule ^(.*)$ /search/%1/page-1? [R=301,L]
RewriteRule ^search/(.+?)/page-(.+?)/?$ ./search.php?text=$1&page=$2
 

Back
Горе