Я даже не уверен, правильно ли я поступаю, поэтому я собираюсь представить здесь всю проблему.
У меня есть сайт с 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