2013-05-29 2 views
0

Я хотел бы задать простой вопрос о .htaccess. У меня есть форма от index.html, и я хотел бы передать значение receiver.php. Как вы настраиваете .htaccess для вывода http://localhost/demo/receiver/jibberish вместо http://localhost/demo/receiver.php?fid=jibberish?Настроить .htaccess изменить параметры HTTP GET на URI

HTTP: // {host_name} /demo/index.html

<form method="get" action="receiver.php"> 
    FID <input type="text" name="fid" value="jibberish"> <br> 
    <input type="submit" value="Submit"> 
</form> 

HTTP: // {host_name} /demo/receiver.php

<?php 
    echo $_GET['fid']; 
?> 

Я м с трудным временем. Вот мой код .htaccess.

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase/
RewriteCond %{DOCUMENT_ROOT}/$1 -f 
RewriteRule ^/receiver.php$ /receiver.php?fid=$1 [PT] 
</IfModule> 
+0

Не ясно, что вы хотите. Я предполагаю, что речь идет о показе «симпатичного» URL-адреса без запросов, таких как '/ receiver/jibberish', вместо' receiver.php? Fid = $ 1' с запросом, но по-прежнему равномерно отображать последний ресурс (приемник. PHP). Если это так, это возможно, но какая группа является ссылкой «$ 1» назад, и почему вы используете флаг «PT»? Этот флаг подразумевается в контексте каждого каталога и не требуется в обычном режиме. Дайте один пример полного URL-адреса, отправленного формой без ссылок на 1 доллар или обратно, которые невозможно угадать, пожалуйста. –

+0

Прошу прощения за это. Я обновил url, чтобы четко представлять HTTP GET на fid. –

ответ

2

Включение mod_rewrite и .htaccess через httpd.conf, а затем поместить этот код в каталоге .htaccess под DOCUMENT_ROOT:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(receiver)\.php\?fid=([^\s]+) [NC] 
RewriteRule^/%1/%2? [R=302,L] 

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

После того, как вы убедитесь, что он работает нормально, замените R=302 на R=301. Избегайте использования R=301 (Перманентный переадресация) при тестировании ваших правил mod_rewrite.

+0

@FranzNoel: У вас есть еще один .htaccess в каталоге '/ demo'? – anubhava

1

Это должно работать в одном файле .htaccess в корневом каталоге:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} /demo/receiver.php\?fid=([^&\s]+) [NC] 
RewriteRule .*   /demo/receiver/%1? [R=301,L,NC] 

RewriteCond %{REQUEST_URI} !receiver\.php [NC] 
RewriteRule ^demo/receiver/([^/]+)/? /demo/receiver.php?fid=$1 [L,NC] 
+0

Спасибо за это решение. Это очень помогло. Я прошу прощения за изменение URL-адреса в вопросе, потому что он не отражает реальную проблему. Мне трудно помещать в каталог. –

+0

Хорошо. Рассмотрев ваш вопрос с последним обновлением, я вижу, что в ответе отсутствует каталог '/ demo'. Я изменил его соответствующим образом. –

+0

Я пробовал это. Однако он по-прежнему перенаправляется на 'http: // localhost/receiver/jibberish' вместо' http: // localhost/demo/receiver/jibberish' –

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