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]