Регулярное выражение для замены расширения файла

#php #regex

#php #регулярное выражение

Вопрос:

Я хотел бы, чтобы регулярное выражение заменяло расширение файла .html на / so www.example.com/page.html становится www.example.com/page /. Я также хочу исключить папку из этого правила, чтобы что-нибудь внутри www.example.com/specialdir / должен быть исключен.

РЕДАКТИРОВАТЬ: это будет использоваться в php

Комментарии:

1. Какой вкус регулярного выражения? На каком языке или редакторе?

2. это будет использоваться в php

3. В каком контексте отображается URL-адрес? Это само по себе или это просто одна часть более длинной строки? Есть ли более одного в более длинной строке? Будет ли в URL-адресе когда-либо запрос или фрагменты? Всегда полезно предоставить несколько желаемых примеров до и после репрезентативных примеров.

Ответ №1:

Лучше использовать htaccess:

 RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.html [L,QSA]
  

Источник: Snipplr

Так что это изменит все http://somesite/someurl чтобы http://somesite/someurl.html на стороне сервера.

Комментарии:

1. Я хочу, чтобы все было наоборот …. удалить .html и не добавлять. Также я хочу добавить исключение, когда правило не применяется к определенной папке

2. @thearchitect, проведите небольшое исследование по htaccess и mod_rewrite. Вероятно, это ответ, который вы ищете.

3. @thearchitect мой код не перенаправляет пользователя на страницу .html. Это вносит изменения на стороне сервера, и пользователь видит на панели задач: somesite.com/somepage вместо того , чтобы somesite.com/somepage.html

Ответ №2:

Поиск

 (www.example.com/(?!specialdir/).*).html$
  

и замените все на 1 или $1 , в зависимости от вашей реализации регулярных выражений.

РЕДАКТИРОВАТЬ: в PHP:

 $result = preg_replace('%(www.example.com/(?!specialdir/).*).html$%', '1', $subject);