Подскажите по htaccess

R1
На сайте с 15.02.2009
Offline
45
619

Здравствуйте хочу сделать сайт на файлах, все странички будут в папке pages. Как правильно написать в .htaccess, чтобы они были в корне?

сайт.ру/pages/index.html - сейчас

сайт.ру/index.html - хочу так

Долго гуглил, написал так, но выдает ошибку 403.

RewriteEngine On

RewriteRule ^pages/(.*) /$1 [R=301,L]

Буду рад, если кто поможет.

Sveta Prokopeva
На сайте с 10.05.2006
Offline
99
#1

Ваш вариант редиректит из папки pages в корень. Чтобы получить доступ к файлам папки pages из корня используйте:

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/pages
RewriteRule ^(.*)$ /pages/$1 [L]
R1
На сайте с 15.02.2009
Offline
45
#2
Sveta Prokopeva:
Ваш вариант редиректит из папки pages в корень. Чтобы получить доступ к файлам папки pages из корня используйте:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/pages
RewriteRule ^(.*)$ /pages/$1 [L]

Спасибо, теперь страница доступна, но есть трабла картинки стали битыми и стиль (css) не загружается.

Посмотрел на путь картинки, он стал /pages/папка/images/7.jpg а на самом деле верный путь такой /папка/images/7.jpg :( можно этого как-то избежать?

IL
На сайте с 20.04.2007
Offline
435
#3
rabota1003:
можно этого как-то избежать?

Указывать абсолютные пути от корня сайта

src="/папка/images/7.jpg"

и в редирект добавить условие, чтоб он не всё подряд в pages отправлял.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Sveta Prokopeva
На сайте с 10.05.2006
Offline
99
#4

rabota1003, добавьте:

RewriteCond %{REQUEST_URI} \.html$

Чтобы правило действовало только на html-ки

R1
На сайте с 15.02.2009
Offline
45
#5
Sveta Prokopeva:
rabota1003, добавьте:
RewriteCond %{REQUEST_URI} \.html$

Чтобы правило действовало только на html-ки

Спасибо, и последний вопрос - можно ли, чтобы это касалось только папки /pages и не затрагивало другие. Т.е. хотелось бы, чтобы в других папках тоже были html-ки и они работали в штатном режиме.

Sveta Prokopeva
На сайте с 10.05.2006
Offline
99
#6

rabota1003, может тогда вот так сделаете? По простому:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /pages/$1 [L]

Если файл есть, отдавать его, если файла нет, искать его в папке pages. Это более гибкое решение получится.

R1
На сайте с 15.02.2009
Offline
45
#7
Sveta Prokopeva:
rabota1003, может тогда вот так сделаете? По простому:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /pages/$1 [L]

Если файл есть, отдавать его, если файла нет, искать его в папке pages. Это более гибкое решение получится.

К сожалению тогда все файлы (я так понимаю) будут искаться в папке /pages/ а хотелось бы этого избежать т.к. в других папках некоторые странички будут. Нельзя ли как-то в этом коде :

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/pages
RewriteCond %{REQUEST_URI} \.html$
RewriteRule ^(.*)$ /pages/$1 [L]

добавить условие, чтобы это распространялось только на папку /pages/ или это технически невозможно/долго писать?

Sveta Prokopeva
На сайте с 10.05.2006
Offline
99
#8

rabota1003, ровно наоборот, они будут искаться в папке pages только когда их нет по указанному пути.

R1
На сайте с 15.02.2009
Offline
45
#9
Sveta Prokopeva:
rabota1003, ровно наоборот, они будут искаться в папке pages только когда их нет по указанному пути.

Спасибо Вам, этот способ идеально подходит, но все же задам последний (теперь точно :)) вопрос - теперь, если набрать /папка/ или просто домен, то выдает 500 ошибку, если /папка/index.html то все норм, почему так стало? До правок htaccess было домен = /index.html а теперь ошибка.

Sveta Prokopeva
На сайте с 10.05.2006
Offline
99
#10

rabota1003, да, действительно работает не совсем корректно.

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /pages/$1 [L]

Добавьте условие чтобы правило не действовало на корень. Главную страничку нужно будет разместить в index.html в корне сайта.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий