Как я могу добавить слэш к:Продольный слэш
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php
Я попытался с:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+[^/])$ $1/ [R]
Но это не работает
Как я могу добавить слэш к:Продольный слэш
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php
Я попытался с:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+[^/])$ $1/ [R]
Но это не работает
Посмотреть детали/описание линии для CondPatterns -d и -f для RewriteCond. Посмотрите, как он говорит «проверяет, существует ли он или нет, и является ли обычным файлом»? Это дорого и не очень хорошо масштабируется. Вы действительно заботитесь, если это «обычный файл»? Нет, вам все равно, если это выглядит как файл. (соответствует шаблону filename.extension) Итак, я собираюсь улучшить свой Rewrite, пока я нахожусь в нем.
См. Подробности/описание для 'last' L 'flag for RewriteRule. Посмотрите, как говорится: «Не применяйте больше правил перезаписи»? Держу пари, это то, что ты хочешь, не так ли? Вы хотите, чтобы либо index.php использовался, когда запрос не соответствует расширению статического актива, ИЛИ вы хотите поместить косую черту в конце запроса, который не соответствует шаблону filename.extension , Не оба.
Вот как это сделать:
# turn on matching
RewriteEngine on
# 1st rule block. If any of the conditions don't apply skip over this block to the next.
# condition: uri ends with filename.extension
RewriteCond %{REQUEST_URI} [^/.]+\.[^/.]+$
# condition: uri doesn't end with a desired extension
RewriteCond %{REQUEST_URI} !\.(js|ico|gif|jpg|png|css|html)$ [NC]
# rewrite the request to be for index.php and don't apply any more rules
RewriteRule - index.php [L]
# 2nd rule block. If any of the conditions don't apply skip over this block to the next.
# condition: uri doesn't end with a slash
RewriteCond %{REQUEST_URI} !/$
# condition: uri doesn't end with filename.extension
RewriteCond %{REQUEST_URI} !/[^/]+\.[^/.]+$
# rewrite the request to be appended with a slash
RewriteRule (.*) $1/ [R=301]
Это очень хороший ответ, учитывая, что вы не сказали нам, хотим, чтобы вы пытаетесь сделать. Если вам нужен лучший ответ, вам нужно будет предоставить нам больше информации, чем «Я скопировал и наклеил 2 снайпера кода вместе, но он не работает».
Update: Я поспешно бросил вместе правку к этому ответу на основании ответа cornegigouille в. Вот стенограмма оболочки bash доказательств, которые я сделал для ее проверки. Дайте мне знать, если вы увидите ошибку.
#bruno:~$ (
for str in asdf asdf.css asdf.min.css; do
echo -e "\n## $str ##"
echo /brunobronosky1/$str | grep -E '/[^/.]+\.[^/.]+$' || echo '[no match]'
echo /brunobronosky2/$str | grep -E '/[^/]+\.[^/.]+$' || echo '[no match]'
echo /cornegigouille/$str | grep -E '/[^/.]+(\.[^/.]+)+$' || echo '[no match]'
done
)
## asdf ##
[no match]
[no match]
[no match]
## asdf.css ##
/brunobronosky1/asdf.css
/brunobronosky2/asdf.css
/cornegigouille/asdf.css
## asdf.min.css ##
[no match]
/brunobronosky2/asdf.min.css
/cornegigouille/asdf.min.css
ПРИМЕЧАНИЕ. Чтобы сохранить целостность ответа @ cornegigouille, я хочу записать, что у меня первоначально была точка в первом наборе символов последнего RewriteCond, например: «RewriteCond% {REQUEST_URI}!/[^ /.] + \ . [^ /.] + $ 'Это была ошибка, которая сделала мой код хрупким. Я с тех пор исправил это, благодаря им, заботясь достаточно, чтобы указать на это. –
Ответ Бруно большой, но неполный.
Он не относится к случаю, когда имя файла содержит несколько точек. Это довольно часто, когда вы начинаете использовать минимизацию (например, www.mysite.com/css/styles.min.css).
2-е условие 2-го блока правил должен поэтому быть:
# condition: uri doesn't end with filename.extension
RewriteCond %{REQUEST_URI} !/[^/.]+(\.[^/.]+)+$
7 лет спустя ... приятно! –
Да, 7 лет спустя, это не помогает ОП, но помогает сообществу. –
Большой улов, @cornegigouille. Однако я думаю, что моя ошибка может быть исправлена за счет уменьшения сложности регулярного выражения, а не увеличения его. Кажется, это работает для вас? 'для str in/asdfcss /asdf.css /asdf.min.css; do echo "## $ str ##"; echo $ str | grep -E '/[^/]+\.[^/.] + $ '; done' Я думаю, что это так, но я могу быть психически из контекста после столь долгого времени. –
Выглядит нормально для меня – Greg
Можете ли вы дать нам больше информации (+ должно быть действительно * хотя..)? Возможно, о том, как вы протестировали это правило. – Gumbo
Содержимое, которое я разместил, это то, что содержит мой .htacess, этот RewriteRule! \. (Js | ico | gif | jpg | png | css | html) $ index.php скопирован из Zend. –