Назад | Перейти на главную страницу

htaccess с несколькими параметрами

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !\.php$

RewriteRule ^(.*)/(.*)/(.*)$ $1.php?Action=$2&id=$3
RewriteRule ^(.*)/(.*)$ $1.php?Action=$2
RewriteRule ^(.*)$ $1.php

Вот мой .htaccess. Однако только первые RewriteRule работает. Если я закомментирую другие правила, остальные будут работать нормально, но они не работают вместе. Мне нужен чистый URL-адрес с несколькими параметрами.

Я понятия не имею об этой проблеме. Я много гуглил, и вся информация, которую я нашел, говорит то же самое, что и мой код.

Вам необходимо связать свои RewriteRules с помощью флага C, как описано на странице ServerFault. Все, что вы хотели знать о правилах Mod_Rewrite, но боялись спросить?

В вашем случае это будет:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !\.php$

RewriteRule ^(.*)/(.*)/(.*)$ $1.php?Action=$2&id=$3 [C]
RewriteRule ^(.*)/(.*)$ $1.php?Action=$2 [C]
RewriteRule ^(.*)$ $1.php
Options -MultiViews 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !\.php$ 
RewriteRule ^(.*)/(.*)/(.*)$ /api/$1.php?Action=$2&id=$3 [L] 
RewriteRule ^(.*)/(.*)$ /api/$1.php?Action=$2 [L]

С флагом [L] мой htaccess начал работать нормально.