mod_rewrite - проблема с сочетанием правил - PullRequest
0 голосов
/ 13 июля 2011

У меня есть следующие правила, которые работают:

  • действует только на файлы, которые существуют
  • исключить любые файлы, которые содержат изображения | js | css в их uri
  • добавить косую черту для запроса uri

Переписать правила:

RewriteEngine on
DirectorySlash Off

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/(images|js|css)$ 
RewriteRule ^(.*[^/.])$ /$1/ [R=301,L]

Теперь мне нужно правильно перенаправить мой домашний адрес Uri следующим образом:

http://www.example.com/sitemap/ -> http://www.example.com/index.php?page=sitemap

Я пробовал следующий подход:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/.])$ index.php?page=$1 [R=301,L,NC]

Но я получаю страницу, не найденную, предположительно, потому что за 1 доллар подается что-то с косой чертой. Я думал, что [^/] удалит его, но, очевидно, нет.

Может кто-нибудь объяснить, где я здесь не так, пожалуйста?

1 Ответ

1 голос
/ 14 июля 2011

Используйте это правило - оно перезапишет /sitemap/ в /index.php?page=sitemap:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ /index.php?page=$1 [QSA,L]
  1. Поместите его в .htaccess в корневую папку сайта. Если его разместить в другом месте, его нужно немного подправить.

  2. URL останется прежним. Существующая строка запроса будет сохранена.

  3. Должен присутствовать завершающий слеш / (т. Е. /sitemap не будет запускать это правило).

  4. Он будет перезаписан только в том случае, если такой папки или файла нет (т. Е. Если у вас есть папка с именем sitemap в корневой папке вашего веб-сайта, перезапись не произойдет).

  5. Он будет работать только для URL-адресов с 1 папкой (например, /sitemap/, /help/, /user-account/ и т. Д.). Он не будет работать для 2 или более папок в пути (например, /account/history/).


RE: эта строка: RewriteCond %{REQUEST_URI} !/(images|js|css)$.

Вы сказали, что хотите "исключить любые файлы, которые содержат изображения | js | css в их uri" . К сожалению, вышеприведенный шаблон работает иначе - он будет соответствовать /something/css, но не будет соответствовать /css/something или /something/file.css.

Если вы хотите сопоставить изображения | js | css ЛЮБОЕ в URL сразу после косой черты, удалите $.

...