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 начал работать нормально.