mod_rewrite: абсолютный путь делает параметры видимыми в адресной строке

#mod-rewrite

#перезапись мода

Вопрос:

Когда я в .htaccess устанавливаю

 RewriteEngine On
RewriteRule mynews/([0-9a-zA-Z] )/([0-9a-zA-Z] )/([0-9a-zA-Z] )/([_0-9a-zA-Z] )/$ http://mysite/mynews.php?a=$1amp;b=$3amp;c=$2 
  

конечный URL-адрес http://mysite/mynews.php?a=1amp;b=5amp;c=291 становится видимым в строке браузера. Есть ли способ предотвратить это, заставить mod_rewrite показывать «красивый» каталог, напримерhttp://mysite/mynews/1/2/3 / ?

Ответ №1:

Удалите это:

 http://mysite/mynews..
^^^^^^^^^^^^^^
  

Итак…

 RewriteEngine On
RewriteRule mynews/([0-9a-zA-Z] )/([0-9a-zA-Z] )/([0-9a-zA-Z] )/([_0-9a-zA-Z] )/$ mynews.php?a=$1amp;b=$3amp;c=$2
  

Конечно, вы можете указать абсолютный ПУТЬ к файлу (вместо URL-адреса), например:

 /var/www/blog/mynews.php?a=$1amp;b=$3amp;c=$2
  

Комментарии:

1. Питер, спасибо за ответ. Я избегаю использования ОТНОСИТЕЛЬНОГО URL-пути, потому что в этом случае все скрипты, включенные в mynews.php с PHP функции include() и require() были пропущены, потому что страница php «думает», что она размещена в нескольких папках, которые на самом деле являются «виртуальными» из-за использования mod_rewrite.

2. У меня также была проблема с путями к изображениям и ссылкам в HTML, которая решается с помощью тега <base href=»…»> . Но, очевидно, это не работает для функций PHP.

3. Нет, то, что вы сказали, неверно. Если конфигурация вашего сервера верна, не имеет значения, будете ли вы использовать относительный или абсолютный путь в htaccess для PHP-скрипта.

4. Хорошо. Я обнаружил, что эта проблема может быть решена, если вместо include(‘myscript.php ‘) вы будете использовать include(‘../myscript.php ‘) или включить(‘./../myscript.php ‘) и т.д. в зависимости от количества «виртуальных» папок.