Изменить RewriteRule, чтобы изменить результаты параметра

Вот моя конфигурация каталога Apache 2:

<Directory /var/www/html/website/>
Options +SymLinksIfOwnerMatch
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?operator=$1&url=$2 [L,QSA]
RewriteRule ^([^/]+)/?$ index.php?operator=$1 [L,QSA]
</Directory>

Если я войду http://example.com/website/a/b тогда я вижу: ?operator=a&url=b, Это нормально и это то, что я ожидаю.
Если я войду http://example.com/website/a/ тогда я вижу: ?operator=a&url=, Это тоже нормально и ожидаемо.

Моя проблема является результатом http://example.com/website/. Что я вижу ?operator=index.php&url=,
Я ожидал увидеть оба параметра пустыми, но оператор заполняется с помощью «index.php».

Как я могу изменить мой ‘RewriteRule’, чтобы оба параметра были пустыми, когда нет никаких каталогов, тянущихся после веб-сайта, как показано в моем примере?

0

Решение

Это потому, что правило перезаписи выполняется дважды, потому что RewriteCond применяется к следующей немедленной RewriteRule,

Измените свои правила на:

<Directory /var/www/html/website/>
Options +SymLinksIfOwnerMatch
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?operator=$1&url=$2 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?operator=$1 [L,QSA]
</Directory>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]