В моем htaccess-файле есть следующее:
RewriteEngine On
RewriteBase /
# Check to see if the URL points to a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Trailing slash check
RewriteCond %{REQUEST_URI} !(.*)/$
# Add slash if missing & redirect
RewriteRule ^(.*)$ $1/ [L,R=301]
# Check to see if the URL points to a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Send to index.php for clean URLs
RewriteRule ^(.*)$ index.php?/$1 [L]
Это работает. Он скрывает index.php и добавляет косую черту ... кроме случаев, когда есть строка запроса.
Этот URL:
http://example.com/some-page
перенаправляется на:
http://example.com/some-page/
но этот URL:
http://example.com/some-page?some-var=foo&some-other-var=bar
не перенаправляется. Я хотел бы, чтобы вышеперечисленное было отправлено по адресу:
http://example.com/some-page/?some-var=foo&some-other-var=bar
Я достиг предела моего понимания перенаправлений с этим. Если у вас есть рабочий ответ, я был бы очень признателен за то, что делает каждая строка и почему она работает. Удивительный двойной бонус за объяснение того, почему то, что у меня есть сейчас, не работает, когда задействована строка запроса.