2013-03-29 2 views
0

Я написал простой сценарий перезаписи мод, чтобы превратить website.com/index.php?var1=1&var2=2&var3=3 в website.com/index/1/2/3. Почему-то это не работает, какие-то идеи почему?Модификация Неправильная работа

#RewriteRule ^$ index.php [QSA] 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.+)$ $1\.php [QSA] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php/$1 [QSA] 

RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ comments.php?var1=$1&var2=$2&var3=$3 

ответ

0

Похоже, что переписывание по строке 6 поймает это и отправит его index.php. Трудно сказать, что не знаю, что такое файлы и каталоги, но я бы предположил, что это не так. Если у вас есть доступ к httpd.conf вы можете повернуть вверх журналирование переписывания, установите

RewriteLogLevel 8 

И это будет регистрировать гораздо больше информации, чем нужно отлаживать это. В более новых версиях Apache настройка устанавливается с LogLevel .. например

LogLevel alert rewrite:trace8 

, которые могут быть разрешены в Htaccess или виртуальный хост одновременно так посмотреть его в документации вашей версии.

Не оставляйте это, так как это серьезно повлияет на производительность.

1
  • Первое правило переписывает index/1/2/3 на index/1/2/3.php.
  • , то второе правило переписывает это значение index.php/index/1/2/3.php
  • и, наконец, последнее правило не совпадает.

Если вы хотите переписать website.com/index.php?var1=1&var2=2&var3=3 в website.com/index/1/2/3, вы должны захватить строки запроса аргументы RewriteCond и вставить их в RewriteRule

RewriteEngine on 
RewriteCond %{QUERY_STRING} var1=(.*?)&var2=(.*?)&var3=(.*?) 
RewriteRule ^index.php$ /index/%1/%2/%3 [L] 

Если вы хотите перенаправить вместо внутренне переписать, то есть показать новый URL в браузере, использовать [R,L] в RewriteRule флаги

RewriteRule ^index.php$ /index/%1/%2/%3 [R,L] 
+0

+1 это действительно отвечает на вопрос «почему это не работает». –

1

Я не знаю, что это Prob Лем с правилами в вашем вопросе, но для достижения этой цели:

превратить website.com/index.php?var1=1&var2=2&var3=3 в website.com/index/1/2/3.

вам нужно что-то подобное в одном файле .htaccess в корневом каталоге:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_URI} !\.php [NC] 
RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/([^/]+)/([^/]+)/? [NC] 
RewriteRule .*     /%1.php?var1=%2&var2=%3&var3=%4 [L,NC] 

Карты молча:

http://website.com/filename/1/2/3

To:

http://website.com/filename.php?var1=1&var2=2&var3=3

Где файла, , и являются динамическими строками.

Для постоянного перенаправления замените [L, NC] на [R = 301, L, NC].

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