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

Могу ли я указать значение по умолчанию в правиле перезаписи, если выражение не совпадает?

Я даже не уверен, правильно ли я поступаю, поэтому я собираюсь представить здесь всю проблему.

У меня есть сайт с URL-адресами, которые выглядят так:

www.example.com/some-random-key/page.php

и я перенаправляю так:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*?)/(.*?)$ $2?key=$1

и это ВСЕГО РАБОТАЕТ. Моя проблема в том, что следующие два URL-адреса не эквивалентны:

www.example.com/my-key
www.example.com/my-key/

Второй пример ведет себя так, как ожидалось, с перенаправлением на index.php на корневом уровне и передачей my-key в качестве параметра.

Первый пример завершается ошибкой "не найдено".

Есть ли способ добавить правило, которое говорит if the file isnt found, then fetch index.php?key=$key или я подхожу к этому не с той точки зрения?

Ваша проблема - это в основном регулярное выражение. Вы пытаетесь сопоставить что-либо, за которым следует косая черта, а затем что-либо.

Ты должен попытаться:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ $2?key=$1 [R,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^.*/$
RewriteRule ^(.*)$ ?key=$1 [R,L]

Первый блок - это ваша конфигурация, и она работает так, как вам нужно. Второй применяется только в том случае, если нет завершающей косой черты, что вам и нужно.

единственный недостаток заключается в том, что если кто-то запросит URL-адрес, у которого нет соответствующего page.php после ключа (скажем, /some-key/nonexistant.php), он будет перенаправлен на? key = nonexistant.php (don ' Не знаю, как это назвать, функция или ошибка: P).

Страница по умолчанию для запроса /?key=your-key это ты DefaultIndex