2015-03-09 5 views
0

я пытаюсь переписать URL из чего-то вроде этого:Htaccess для чистых URL-адресов без жесткого кодирования получить переменные

http://www.domain.com/index.php/service/variable1/value/variable2/value .... вплоть до 8 переменных.

Для этого:

http://www.domain.com/index.php?pagekey=service&variable1=value&variable2=value .... вплоть до 8 переменных.

Переменные будут меняться со страницы на страницу, поэтому я не могу их жестко закодировать в правиле перезаписи. Переменная и значение должны быть переменными htaccess.

Я следующий Htaccess код прекрасно работает на Apache 2.2.9 (Debian), но тот же код не работает на Apache 2.2.16 (Debian) ИЛИ апача 2.2.22 (Debian)

Кто-нибудь есть идеи относительно того, почему это может быть?

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{DOCUMENT_ROOT}/$1 -f 
RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif|php))$ /$1 [L,R=301,NC] 

RewriteRule ^index/(.*)$ index.php?pagekey=$1 
RewriteRule ^index.php/(.*)$ index.php?pagekey=$1 

RewriteRule ^index/(.*)/(.*)/(.*)$ index.php?pagekey=$1&$2=$3 
RewriteRule ^index.php/(.*)/(.*)/(.*)$ index.php?pagekey=$1&$2=$3 

RewriteRule ^index/(.*)/(.*)/(.*)/(.*)/(.*)$ index.php?pagekey=$1&$2=$3&$4=$5 
RewriteRule ^index.php/(.*)/(.*)/(.*)/(.*)/(.*)$ index.php?pagekey=$1&$2=$3&$4=$5 

RewriteRule ^index/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ index.php?pagekey=$1&$2=$3&$4=$5&$6=$7 
RewriteRule ^index.php/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ index.php?pagekey=$1&$2=$3&$4=$5&$6=$7 

RewriteRule ^index/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ index.php?pagekey=$1&$2=$3&$4=$5&$6=$7&$8=$9 
RewriteRule ^index.php/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ index.php?pagekey=$1&$2=$3&$4=$5&$6=$7&$8=$9 
+0

Есть ли причина, вы пытаетесь это сделать? Существующий синтаксис var1/var2/var3 намного читабельнее/легче для пользователя для повторного ввода, чем того, к которому вы пытаетесь переписать его. – BMac

+0

Чтобы иметь доступ к переменным в PHP с использованием $ _GET вместо того, чтобы пытаться проанализировать URL. Пользователь всегда будет видеть первый пример URL, который я разместил, однако PHP увидит его как второе. – PHPNorton

+0

Какая почтальон или ошибка вы получаете? Также вы всегда должны привыкнуть с помощью '[L]' в конце каждого RewriteRule –

ответ

0

Вы можете обрабатывать все эти комбинации с этими 3 общими правилами:

RewriteEngine On 
RewriteBase/

RewriteRule ^(index)(?:\.php)?/([^/]+)/?$ $1.php?pagekey=$2 [L,NC,QSA] 

RewriteRule ^(index)(?:\.php)?/([^/]+)/([^/]+)/([^/]+)/?$ $1.php?pagekey=$2&$3=$4 [L,NC,QSA] 

RewriteRule ^(index)(?:\.php)?/([^/]+)/([^/]+)/([^/]+)(/.*)?$ $1.php/$2$5?$3=$4 [L,NC,QSA] 
+0

Я тоже пробовал это, он ведет себя так же, как и исходный. Может ли быть что-то в конфигурации Apache, которой я не хватает? Я допустил переопределение и включил модуль mod-rewrite. Что-нибудь еще, что может помешать этому работать? – PHPNorton

+0

Сначала это правильно протестированное универсальное решение, которое отлично работало на моем Apache. Теперь скажите, какой полный URL вы пытались и какая у вас ошибка? Убедитесь, что при проверке этого нет другого правила в этом .htaccess. – anubhava

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