Ru-Board.club
← Вернуться в раздел «Web-программирование»

» mod_rewrite: документация, готовые решения, вопросы

Автор: Redduck9
Дата сообщения: 07.01.2012 11:50
Nagolder
Я думал про конкретную строку, одну. Но можно поколдовать. Просто надо знать какие варианты могут встретиться. Но в конечном итоге, времени может уйти больше чем сделать с помощью скрипта, а у некоторых может и наоборот. Вообщем кто каким инструментом владеет лучше
Всех с НОВЫМ ГОДОМ!
Автор: nickjust
Дата сообщения: 12.01.2012 19:56
привет всем!
Тут проблемка нарисовалась ..

Супортер вырубил все настройки апача и пшп..
И теперь не работает редирект на субдомены!

Во вложение httpd.conf и htaccess.txt
http://zalil.ru/32483358
В корне папка subdomains и там папки субдоменов!
Все идеально работало!
Хостер говорит включите что вам надо!
Что включить чтобы работало ?


CGI     Off-On
Options +ExecCGI     Off-On
Options +Indexes     Off-On
Options +Includes     Off-On
Options +FollowSymLinks     Off-On
Options +Multiviews     Off-On

AddDefaultCharset     OFF
Оптимизированый алгоритм отдачи статического контента
Данный параметр позволяет обрабатывать скрипты сайта и статические данные разными http серверами. Это значительно увеличивает скорость работы сайта и понижает его нагрузку на сервер. Данную опцию нужно отключать только в случае если на сайте используется mod_rewrite и динамические страницы преобразовываются в форматы jpg, jpeg, gif, png, ico, css, bmp, js, swf, avi, mp3, flv, mpeg.     


Автор: billybons2006
Дата сообщения: 19.01.2012 13:55
Подскажите, пожалуйста, есть два домена: domain.com и domain.ru.
Никак не могу придумать, как сделать так, что бы обращении к домену domain.com к строке параметров добавлялся бы параметр lang=eng, а при обращении к domain.ru - параметр lang=ru

Пример:
http://domain.ru/index.php?p=30
превращался бы в
http://domain.ru/index.php?p=30&lang=ru

а

http://domain.com/index.php?p=30
превращался бы в
http://domain.com/index.php?p=30&lang=eng

Проблема в том, что оба домена (ru и com) ведут на одну папку на одном хостинге. Изменить это никак нельзя Надо основываясь на введенном имени домена добавить к остальной части параметров lang (чтобы внутри скрипта index.php на основании $_GET[lang] можно было делать запросы либо к английской БД, либо к русской.

ЧПУ я дальше доделаю сам. Помогите, пожалуйста! Сейчас пришлось сделать временную заглушку:
RewriteCond %{HTTP_HOST} domain.com
RewriteRule (.*) http://domain.ru/$1 [R=301,L]

Но это только временно...

Добавлено:
Нечто вроде:

RewriteRule ^soft([0-9]+).html$ /index.php?p=$1 [L]

только с обработкой имени домена (пример ниже не работает, а хостинг уже включен, мне нельзя особо экспериментировать!):

RewriteRule ^domain.([a-z](2,3))/soft([0-9]+).html$ /index.php?lang=$1&p=$2 [L]

Вот примерно такая мысль...
Автор: dacuan
Дата сообщения: 19.01.2012 16:35
billybons2006

Цитата:
Проблема в том, что оба домена (ru и com) ведут на одну папку на одном хостинге. Изменить это никак нельзя Надо основываясь на введенном имени домена добавить к остальной части параметров lang (чтобы внутри скрипта index.php на основании $_GET[lang] можно было делать запросы либо к английской БД, либо к русской.


А что мешает в скриптах выбирать какую базу подключать основываясь не на $_GET["lang"], а на $_SERVER["HTTP_HOST"]?

Но если очень нужен lang, то можно попробовать так:

Код: RewriteCond %{HTTP_HOST} domain.com
RewriteCond %{QUERY_STRING} !lang
RewriteRule ^(.*)$ $1?lang=eng [QSA,L,NS]

RewriteCond %{HTTP_HOST} domain.ru
RewriteCond %{QUERY_STRING} !lang
RewriteRule ^(.*)$ $1?lang=rus [QSA,L,NS]
Автор: billybons2006
Дата сообщения: 20.01.2012 09:02
dacuan, вы просто супер!

Цитата:
основываясь не на $_GET["lang"], а на $_SERVER["HTTP_HOST"]?

Это как раз то самое, что мне и надо было! Намного проще и без мытарств с htaccess! Большое спасибо!

Но и за код для htaccess спасибо также!
Автор: falcon92
Дата сообщения: 24.01.2012 20:22
Салют всем.

Срочно нужен хелп.
Нужно статические элементы получать не из site.ru:80, а из site.ru:8081. Затрахался с мод реврайтом.


Цитата:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^.* - [F]
RewriteRule ^(.*)$ http://site.ru:8081/images/$1 [R,L]


Так получаем бесконечный Loop загрузки картинки по нужному адресу. Оооочень срочно надо.
Хотя бы один пример с jpg. С остальными сам разберусь.
Автор: Laterport
Дата сообщения: 09.02.2012 10:26
Знатоки, подскажите пожалуйста.


Код: RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) $1.php

ErrorDocument 500 http://site.ru/error500
RewriteRule ^(error500.*) error500.html
Автор: Redduck9
Дата сообщения: 09.02.2012 13:09
Laterport
Я не знаток, но мне кажется то что Вы предлагаете не верное решение! А что если поисковик пойдет по странице а сервер по каким либо причинам выдаст "error500", то ему отобразится данные "error500" с адресам главной странице, что поисковик должен думать?
Но я не большой знаток, возможно ошибаюсь!
Автор: Laterport
Дата сообщения: 09.02.2012 13:23
Redduck9
В данном случае меня не интересует куда пойдёт поисковик.
Автор: Laterport
Дата сообщения: 13.02.2012 05:03
Кто-нибудь ответит на мой вопрос?
Автор: Qwezar
Дата сообщения: 21.03.2012 06:35
Есть сайт, который залит в папку site на сервере (http://my_site/site). При работе из корня, сайт работает нормально, но при работе из папки все пути в html коде ведут от корня, т.е. от домена. Как сделать, чтобы корнем была папка site?
Автор: dacuan
Дата сообщения: 21.03.2012 13:53
Qwezar
Скорректировать настройку DocumentRoot в файле настроек апача
Автор: Cheery
Дата сообщения: 21.03.2012 19:53
dacuan

Цитата:
Скорректировать настройку DocumentRoot в файле настроек апача

я так понимаю, что нужно чтобы все было именно в папке.

Qwezar
есть способ - брать путь к запрашиваемому файлу, цеплять к нему путь к другой папке, проверять есть ли он там и если есть, то и "перекидывать" на него. но, как я и сказал, неужели сложно заменить пути в кодах сайта?
Автор: Qwezar
Дата сообщения: 22.03.2012 04:00
Cheery
Ну это как вариант поправить во всех скриптах, стилях и шаблонах пути, просто думал может есть простой альтернативный вариант.
Автор: Cheery
Дата сообщения: 22.03.2012 04:06
Qwezar

Цитата:
Ну это как вариант поправить во всех скриптах, стилях и шаблонах пути, просто думал может есть простой альтернативный вариант

так это не статика? и все пути прописаны в жестко, не через переменную?
ну вообще то можно включать буферизацию ( www.php.net/ob_start ), после отработки скрипта брать код выводимой страницы из буфера и обрабатывать ссылки.
Автор: Qwezar
Дата сообщения: 22.03.2012 04:57
Вот если прописать в корне сайта в .htaccess строку вида:

Код:
RewriteRule (.*) site/$1 [L]
Автор: Cheery
Дата сообщения: 22.03.2012 05:03
Qwezar

Цитата:
Может можно как то переписать правило, чтобы открывался только

а как определите приходит запрос с одного URL или другого? только по рефереру, но ведь он может и не передаваться.

Цитата:
тогда сайт нормально открывается по адресу: http://my_site/site, но и в тоже время он открывается и по http://my_site/

потому что только основная страница берется из /site/ пути, все остальные же пути переходят на /, скорее всего.
Автор: Qwezar
Дата сообщения: 22.03.2012 05:18
Cheery
Эта строка всегда перенаправляет запрос в папку site, если я даже http://my_site/qwe введу, все равно сайт откроется. Возможно вместо (.*) надо написать что то типо:

Код:
RewriteRule ^/site/$ site/index.php$1 [L]
Автор: Shtef2009
Дата сообщения: 31.03.2012 06:35
Мир всем! Парни, нужна помощь по синтаксису файла .htaccess. Задача такая. Есть сайт (статический HTML). Нужно составить .htaccess таким образом, чтобы при попытке поискового робота проиндексировать любую страницу кроме *.htm (либо при попытке зайти с браузера на любую страницу, кроме *.htm) была переадресация на страницу 404, а именно http://site.ru/404. Сервер хостинга не отдает автоматом ошибку 404 при наборе несуществующего урла, в результате чего в индексе появилось несколько страниц с адресами типа /index.htm?=всякое_говно/
необходимо, чтобы индексировались только страницы вида *.htm. как задать такой редирект? Буду признателен за подсказку.
Автор: Cheery
Дата сообщения: 31.03.2012 07:04
Shtef2009
а через Robots.txt пробовали это ограничить?
Автор: Shtef2009
Дата сообщения: 31.03.2012 08:07

Цитата:
а через Robots.txt пробовали это ограничить?

Через robots можно, в принципе, закрыть индексацию. Но мне нужно не просто чтобы страница не индексировалась, но чтобы была переадресация на 404
Автор: Laterport
Дата сообщения: 11.04.2012 10:20
Подскажите пожалуйста.
Имею два вопроса. В данный момент в .htaccess прописано:


Код:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ $1.php
Автор: dacuan
Дата сообщения: 11.04.2012 11:14
Laterport
Попробуйте так:

Код: RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} \.(html|htm)$
RewriteRule ^(.*)\.(html|htm)$ $1.php [NS,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ $1.php [NS,L]
Автор: Laterport
Дата сообщения: 11.04.2012 11:56
dacuan
Результата нет.
Автор: dacuan
Дата сообщения: 11.04.2012 12:43
Laterport
Тогда традиционный вопрос. Что в логах реврайта?
Автор: Laterport
Дата сообщения: 11.04.2012 13:18
dacuan
http://pastebin.com/k33DgwPF
Автор: dacuan
Дата сообщения: 11.04.2012 14:40
Laterport
В логе нет ни одного обращения к *.html или *.htm. Что именно вы пытались сделать и как на это отреагировал апач?

Приведенный мной код позволяет обращаться к скрипту вида some.php по URL'ам
http://example.com/some
http://example.com/some.php
http://example.com/some.htm
http://example.com/some.html

И все. Если это не то, что вам нужно, но опишите пожалуйста проблему подробнее.
Автор: Laterport
Дата сообщения: 11.04.2012 14:55
dacuan

На сайте расположен только index.html и при написании просто /index, сервер сообщает об ошибке: Not Found The requested URL /test.php was not found on this server. Т.е. он пытается найти test.php,а не html. И по поводу моего первого вопроса я так и не понял, возможно ли сделать такое средствами реврайта?

Повторю вопрос.
При написании адреса без "php", переход на неё осуществляется нормально и расширение не отображается в адресной строке, НО, при следующем переходе на сайте по ссылке, например сайт.ru/browse.php, расширение уже прописывается.
Автор: dacuan
Дата сообщения: 11.04.2012 16:28
Laterport

Цитата:
При написании адреса без "php", переход на неё осуществляется нормально и расширение не отображается в адресной строке, НО, при следующем переходе на сайте по ссылке, например сайт.ru/browse.php, расширение уже прописывается.

Боюсь, вам придется во всех шаблонах у всех ссылок убрать расширение php


Цитата:
И по поводу моего первого вопроса я так и не понял, возможно ли сделать такое средствами реврайта?

Можете попробовать такую конструкцию:

Код: RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.htm -f
RewriteRule ^(.*)$ $1.htm [NS,L]

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [NS,L]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NS,L]
Автор: Laterport
Дата сообщения: 11.04.2012 16:51
dacuan
Отттак всё работает ))) Большое спасибо за помощь вам! Если расширения не убрать, но и хрен с ними.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

Предыдущая тема: PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.