htaccess неправильно переписывает URL

Это немного странно. Я делаю некоторую работу на сервере, и мне нужно переписать правила для реально существующих каталогов (в некоторых случаях они имеют глубину более одного уровня)

На данный момент мой.htaccess выглядит так:

RewriteEngine on
RewriteRule ^simfiles/([-\ a-zA-Z0-9:/]+)$ http://mydomain.com/?portal=simfiles&folder=$1 [L]

И это работает нормально, например, URL-адрес, как:

mydomain.com/sifmiles/my-files

Будет перенаправлен на

mydomain.com/?portal=simfiles&folder=my-files

Или в случае структуры каталогов, которая глубже одного уровня:

mydomain.com/sifmiles/my-files/more-of-my-files

Будет перенаправлен на

mydomain.com/?portal=simfiles&folder=my-files/more-of-my-files

Я написал регулярное выражение, чтобы оно не совпадало с в пути, потому что есть файлы CSS и JS, которые находятся в simfiles / somedirectory, и если я перенаправить все, то они не могут быть загружены.

Я попробовал конфигурацию как это:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^simfiles/([-\ a-zA-Z0-9:/\.]+)$ http://mydomain.com/?portal=simfiles&folder=$1 [L]

Но это не работает, вещи по-прежнему не загружаются должным образом.

Итак, мой первый вопрос: как я могу добиться этого "правильно"? Мне не нравится мое решение, потому что оно означает, что перенаправления не произойдут, если в папке есть. в его названии.

Моя вторая проблема заключается в том, что, хотя перенаправление происходит правильно, URL становится:

http://mydomain.com/?portal=simfiles&folder=my-files

Я хочу, чтобы URL оставался чистым, например:

http://mydomain.com/sifmiles/my-files

Как мне этого добиться?

1 ответ

Решение

Вы переосмысливаете свое регулярное выражение. Поскольку вы уже проверяете, существует ли базовый файл перед правилом перезаписи, вы должны иметь возможность просто сопоставить что-либо.

RewriteRule ^simfiles/(.+) /?portal=simfiles&folder=$1 [L,QSA]
Другие вопросы по тегам