2016-05-16 2 views
2

Я ищу правильные правила htaccess для своей страницы search.php. Потому что я попробовал несколько, но ничего не получилось. Возможно, мои конфликтующие конфликтующие правила htaccess. Поэтому я также вставляю свой текущий файл htaccess. В настоящее время я следующий поиск URL страницы со строкой запроса:Правило htaccess для search.php страницы

http://my-domain.com/search.php?q=keyword 

Я хочу следующий чистый URL:

http://my-domain.com/search/keyword 

Мой HTML формы является:

<form method="get" action="search.php"> 
    <input type="text" name="q" class="txtfield" value="<?php echo $q; ?>" placeholder="Search post here..." /> 
</form> 

Htaccess:

Options +FollowSymlinks -MultiViews 

RewriteBase/

#Enable mod rewrite 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)$ page.php?category=$1 [QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/([^/]+)$ page.php?category=$1&post=$2 [QSA,L] 

Обратите внимание, что в приведенном выше файле отсутствует правило htaccess, связанное с поиском, потому что, как я уже сказал, ничего не работает. Я всегда видел 404 страницы. Вот почему я удалил его.

Кроме того, если я ставлю кнопку представить в виде в каком-то будущем, как показано ниже:

<form method="get" action="search.php"> 
    <input type="text" name="q" class="txtfield" value="<?php echo $q; ?>" placeholder="Search post here..." /> 
    <input type="submit" name="btnsearch" class="btn" value="Search" /> 
</form> 

Мой поиск URL изменится:

http://my-domain.com/search.php?q=keyword&btnsearch=Search 

Тогда мне интересно, какие исправления/изменения я буду нужно делать в правильном правиле htaccess, которое вы дадите мне в соответствии с моим первым запросом? Должны ли мы иметь два правила, если поисковый URL содержит две или более двух строк запроса? Пожалуйста, помогите мне на этих парнях. Благодарю.

ответ

1

Когда форма представляется это действительно сделает ваш URL, как:

http://my-domain.com/search.php?q=keyword&btnsearch=Search 

Чтобы сохранить представленный URL довольно вам необходимо предотвратить отправку формы при помощи Javascript кода и сделать URL довольно как это.

<html><head> 
<script> 
function prettySubmit(form, evt) { 
    evt.preventDefault(); 
    window.location = form.action + '/' + form.q.value.replace(/ /g, '+'); 
    return false; 
}  
</script> 
</head><body> 
<form method="get" action="search" onsubmit='return prettySubmit(this, event);'> 
    <input type="text" name="q" value="<?php if (isset($_GET['q'])) echo $_GET['q']; ?>" 
     class="txtfield" placeholder="Search post here..." /> 
    <input type="submit" name="btnsearch" class="btn" value="Search" /> 
</form> 
</body></html> 

Это представит свою форму в довольно URL:

http://my-domain.com/search/keyword 

Теперь вам нужно это правило в корне.htaccess для обработки этого симпатичного URL;

Options -MultiViews 
RewriteEngine On 

RewriteRule ^search/(.+)$ search.php?q=$1 [L,QSA,NC] 

Update:

Вот способ сделать это полностью используя mod_rewrite правила без использования JS. Используйте следующие правила в корневом каталоге .htaccess:

Options -MultiViews 
RewriteEngine On 
RewriteBase /my-project/ 

# external redirect from actual URL to pretty one 
RewriteCond %{THE_REQUEST} /search(?:\.php)?\?q=([^\s&]+) [NC] 
RewriteRule^search/%1? [R=302,L,NE] 

# internal forward from pretty URL to actual one   
RewriteRule ^search/(.+)$ search.php?q=$1 [L,QSA,NC] 
+0

Хорошо, но я не понимаю, почему все предлагают использовать JavaScript? Почему это невозможно сделать только в PHP/htaccess? Что произойдет, если кто-то отключил JS в своем браузере? Не могли бы вы рассказать мне, как это сделать без JS? – user5307298

+0

Я хочу решение, которое может работать в обоих случаях - форма без кнопки отправки и с кнопкой отправки. Мне нужны правила htaccess для обеих ситуаций. – user5307298

+0

hmm .. то что [http://matthewjamestaylor.com/blog/how-to-post-forms-to-clean-rewritten-urls](http://matthewjamestaylor.com/blog/how-to-post -forms-to-clean-rewritten-urls) для? – user5307298

1

1.Remove расширения .php (опционально)

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R=301,L] 

2.Support http://my-domain.com/find/keyword

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^find/([^/\.]+)$ /search.php?keyword=$1 

3.Test

<?php 
if ($_POST['query'] != '') { 
    header('Location: /find/' . $_POST['query']); 
} 
echo $_GET['keyword']; 
?> 
<form method="post" action=""> 
    <fieldset> 
     <input type="text" name="query" /> 
     <input type="submit" value="Search" /> 
    </fieldset> 
</form> 

Надеется, что это помогает.

+1

Как находят «find.php»? OP показал, что файл является 'search.php' ... –

+0

, потому что имя' search' в 'search/keyword' не должно совпадать с именем файла search.php, поэтому я дал ему другое имя. – keziah

+1

Это не имеет смысла ... –

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