2People
Guest
Mod_rewrite из каталога в файл (2)
Не получается написать .htaccess с указаниями для mod_rewrite.
Я хочу, чтобы URL вида
http://site.ru/news/about/cont/.../.../
перенаправлялся на
http://site.ru/index.php?url=news/about/cont/.../.../
Пробовал искать в форуме, но находится очень много топиков.
я пробовал писать такое:
RewriteEngine on
RewriteBase /
RewriteRule ^(.*/)$ /index.php?url=$1
Преременная передаётся, но только тогда, когда в адресе есть закрывающиё слэш.
Переделал .htaccess:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R]
RewriteRule ^(.*/)$ /index.php?url=$1
Ничего не изменилось, хотя в поиске находится тема про закрывающие слэш, и там написано, что такое работает.
-~{}~ 09.02.05 02:08:
Переписал .htaccess:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*/)$ /index.php?url=$1
Т.к. директорий, на которые указывает урл не существует, то -d не подощло, поэтому написал !-f (не файл).
Теперь слэш добавляется и к существующим и к не существующим директориям. 1ая проблема решена.
Но теперь mod_rewrite ведёт себя странно (для меня странно) -
когда я захожу на http://site.ru/folder - не работает
когда я захожу на http://site.ru/folder/ - работает
когда я захожу на http://site.ru/folder/folder2 - работает
когда я захожу на http://site.ru/folder/folder2/ - работает
-~{}~ 09.02.05 04:02:
_________________________________________
_________________________________________
_________________________________________
Я понятнее сформулировал вопрос, но отредактировать не могу, придётся добавить:
Алгоритм:
Если физический путь к запрашиваемому месту не файл и не папка (то есть не существует), то по необходимости добавить в конце к запрашиваемому пользователем URL`у слэш, и перенаправить на index.php?url=$1. ($1-запрашиваемый пользователем URL)(пернеправить без [R])
Если физический путь к запрашиваемому месту папка, то по необходимости добавить в конце к запрашиваемому пользователем URL`у слэш.
Иначе ничего не делать.
Получилось так:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*/)$ index.php?url=$1
В результате:
когда я захожу на http://site.ru/folder - не работает (сервер не найден)
когда я захожу на http://site.ru/folder/ - работает
когда я захожу на http://site.ru/folder/folder2 - работает
когда я захожу на http://site.ru/folder/folder2/ - работает
Не получается написать .htaccess с указаниями для mod_rewrite.
Я хочу, чтобы URL вида
http://site.ru/news/about/cont/.../.../
перенаправлялся на
http://site.ru/index.php?url=news/about/cont/.../.../
Пробовал искать в форуме, но находится очень много топиков.
я пробовал писать такое:
RewriteEngine on
RewriteBase /
RewriteRule ^(.*/)$ /index.php?url=$1
Преременная передаётся, но только тогда, когда в адресе есть закрывающиё слэш.
Переделал .htaccess:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R]
RewriteRule ^(.*/)$ /index.php?url=$1
Ничего не изменилось, хотя в поиске находится тема про закрывающие слэш, и там написано, что такое работает.
-~{}~ 09.02.05 02:08:
Переписал .htaccess:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*/)$ /index.php?url=$1
Т.к. директорий, на которые указывает урл не существует, то -d не подощло, поэтому написал !-f (не файл).
Теперь слэш добавляется и к существующим и к не существующим директориям. 1ая проблема решена.
Но теперь mod_rewrite ведёт себя странно (для меня странно) -
когда я захожу на http://site.ru/folder - не работает
когда я захожу на http://site.ru/folder/ - работает
когда я захожу на http://site.ru/folder/folder2 - работает
когда я захожу на http://site.ru/folder/folder2/ - работает
-~{}~ 09.02.05 04:02:
_________________________________________
_________________________________________
_________________________________________
Я понятнее сформулировал вопрос, но отредактировать не могу, придётся добавить:
Алгоритм:
Если физический путь к запрашиваемому месту не файл и не папка (то есть не существует), то по необходимости добавить в конце к запрашиваемому пользователем URL`у слэш, и перенаправить на index.php?url=$1. ($1-запрашиваемый пользователем URL)(пернеправить без [R])
Если физический путь к запрашиваемому месту папка, то по необходимости добавить в конце к запрашиваемому пользователем URL`у слэш.
Иначе ничего не делать.
Получилось так:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*/)$ index.php?url=$1
В результате:
когда я захожу на http://site.ru/folder - не работает (сервер не найден)
когда я захожу на http://site.ru/folder/ - работает
когда я захожу на http://site.ru/folder/folder2 - работает
когда я захожу на http://site.ru/folder/folder2/ - работает