У меня есть следующий .htaccessfile
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
И у меня есть следующий URL:
http://localhost/mysite/loginPage/
Я хочу, чтобы этот URL никогда не заканчивался косой чертой (loginPage /).
Я пытался использовать следующие строки:
RewriteRule ^(.*)\/(\?.*)?$ $1$2 [R=301,L]
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteRule ^([^/]+/[0-9]+/[0-9]+/[0-9]+/[^/]+)/.+$ - [L,R=404]
Но я получаю сообщение об ошибке во всех случаях, что страница не перенаправляет должным образом. Пожалуйста, имейте в виду, что я хочу это только для определенного URL выше, меня не волнует остальная часть сайта.
Я хочу это только для определенного URL выше
В этом случае ваше правило должно просто соответствовать именно этому URI, а не .*/.*
и т.п.
Есть ваши правила, как это:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(/mysite/loginPage)/$ [NC]
RewriteRule ^ %1 [L,R=301]
RewriteCond $1 !^(index\.php|resources|robots\.txt) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php/$0 [L]
Вам не нужно QSA
флаг в последнем правиле также.
Обязательно очистите кеш браузера перед тестированием этого изменения.
Это зависит от того, куда вы положили правило для переписывания. Приведенные вами примеры работают. Но вы должны поставить их перед вашей последней строкой htaccess.
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\/(\?.*)?$ $1$2 [R=301,L]
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Это создаст правильный вывод и может быть проверен с помощью чего-то вроде тестер htaccess
Если вы хотите именно этот URL, вы можете прибегнуть к:
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^mysite/loginPage/$ mysite/loginPage? [R=301,L]
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Вы также можете указать абсолютное перенаправление с
RewriteRule ^mysite/loginPage/$ http://%{HTTP_HOST}/mysite/loginPage? [R=301,L]