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

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

Автор: prestigo
Дата сообщения: 12.01.2014 17:12
Cheery
спасибо

у меня вот еще какой вопрос - что первично, логгирование запроса апачем в acces.log или обработка его с помощью mod_rewrite и логгирование в RewriteLog?
Автор: Cheery
Дата сообщения: 12.01.2014 21:27
prestigo

Цитата:
что первично, логгирование запроса апачем в acces.log или обработка его с помощью mod_rewrite и логгирование в RewriteLog?

не совсем понимаю о чем вы.. access.log не записывает конечный результат обратки rewrite (только если поставили явную переадресацию на новый запрос).
он пишет то, что получил от браузера.
Автор: phpbbmods
Дата сообщения: 02.02.2014 08:42
Уважаемые!
Это снова я

суть проблемы следующее Apache/2.2.15 (CentOS)
mod_rewrite отказывается обрабатывать страницы с URL где есть слово error

плиз кто знает и сталкивался что прописать в php.ini
или через .htaccess

или это глобальное всего сервака?
заранее благодарю!
Автор: Cheery
Дата сообщения: 02.02.2014 08:45

Цитата:
mod_rewrite отказывается обрабатывать страницы с URL где есть слово error  

почему так решили и в чем это выражается?
Автор: phpbbmods
Дата сообщения: 02.02.2014 08:53
Cheery
спасибо за ответ
просто набираем в строке браузера например /error/403/

видим

Not Found
The requested URL /error/403/ was not found on this server.
Apache/2.2.15 (CentOS) Server at www домен Port 80

хотя все остальные страницы работают корректно но там где есть error
пустая страница Not Found

создание реальных страниц к сожалению нечему не привели.
Автор: Cheery
Дата сообщения: 02.02.2014 23:47
phpbbmods
а mod_rewrite тут при чем ?))
в конфиге сервера может быть создан Alias для данного пути, ведущий куда то еще.
Автор: phpbbmods
Дата сообщения: 03.02.2014 10:32
Cheery
дак я думал что это с юрлом связано mod_rewrite найстроки
да и хостер тупил, ладно посмотрим что решат.
Автор: Weinaum
Дата сообщения: 13.02.2014 08:44
что то не могу врубиться, есть следующая проблема.
Есть сайт на joomla, и 3 домена в разных зонах, один домен - site.de - главный, есть еще site.com и site.gr -
последний соот-но в Греции у греческого регистратора.
Хозяин доменов попросил сделать редиректы со всех на de -c com проблемы нет, сделал в панели домена, а в Греции они сами делали когда-то давно, при этом понаписали так, чтобы перебрасывало сразу же на то место, где версия с греческим языком была.
Теперь сайт новый, сами они в Греции разобраться не могут, и редирект с www.site.gr ведет на несуществующий адрес - www.site.de/main.php?seite=1&sprache=2
Теперь что то туплю, как сделать редирект с этого несуществующего урла просто в корень? На другой домен получается, а в корень того же почему-то не происходит редиректа, видимо, что то не так делаю...
Автор: Cheery
Дата сообщения: 13.02.2014 09:46
Weinaum
main.php есть или нет?

RewriteRule ^main\.php / [L]
такое пробовали?
Автор: Weinaum
Дата сообщения: 13.02.2014 10:23
Cheery

Вообще не срабатывает, как будто нет ничего...
Автор: MisHel64
Дата сообщения: 13.02.2014 10:34
Weinaum Может для начала покажешь, как ты делаешь?
Что-то мне подсказывает, что достаточно сделать
RewriteRule ^main.php$ / [NC,L]
Если main.php на site.de отсутствует.
Автор: Weinaum
Дата сообщения: 13.02.2014 18:26
MisHel64
да так и делаю, как вы предлагаете, и как описывает google подобную, казалось бы простую задачу: переадресовать с конкретного несуществующего адреса в корень....
Чтобы не быть голословным, вот - только плз не сочтите за спам, если что после решения уберу ссылки:

http://www.sp-trans.gr - посмотрите куда бросает, именно этот урл вел на прежней версии сайта сразу же на греческий язык.
Что еще характерно - если попробовать перейти с того же домена, но без www - http://sp-trans.gr, редирект ведет в корень, и все корректно.
Т.е. понятно, что надо изменить редирект в консоли греческого домена, но хотелось бы хотя бы временно закрыть эту брешь с помощью .htaccess и mod_rewrite, бо пока дождешься чего то от греков...

Автор: MisHel64
Дата сообщения: 13.02.2014 19:23

Цитата:
Weinaum Может для начала покажешь, как ты делаешь?

Короче. HtAccess В студию.
Автор: Weinaum
Дата сообщения: 13.02.2014 19:32
MisHel64

Цитата:
Короче. HtAccess В студию.

стандартный от joomla, добавлена только склейка с www и без
[more]
##
# @package        Joomla
# @copyright    Copyright (C) 2005 - 2012 Open Source Matters. All rights reserved.
# @license        GNU General Public License version 2 or later; see LICENSE.txt
##

##
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
#
# The line just below this section: 'Options +FollowSymLinks' may cause problems
# with some server configurations. It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file. If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url's. If they work,
# it has been set by your server administrator and you do not need it set here.
##

## Can be commented out if causes errors, see notes above.
Options +FollowSymLinks

## Mod_rewrite in use.

RewriteEngine On

## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site block out the operations listed below
# This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.

## Begin - Custom redirects
#
# If you need to redirect some pages, or set a canonical non-www to
# www redirect (or vice versa), place that code here. Ensure those
# redirects use the correct RewriteRule syntax and the [R=301,L] flags.
#
## End - Custom redirects

##
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root).
##

RewriteBase /

## Begin - Joomla! core SEF Section.
#
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteCond %{HTTP_HOST} ^sp-trans.de [NC]

RewriteRule ^(.*)$ http://www.sp-trans.de/$1 [R=301,L]



#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the request is for something within the component folder,
# or for the site root, or for an extensionless URL, or the
# requested URL ends with one of the listed extensions
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
#
## End - Joomla! core SEF Section.
[/more]
То что выше предлагали пробовал, сейчас убрал.
Автор: Cheery
Дата сообщения: 13.02.2014 20:12
Weinaum

Цитата:
То что выше предлагали пробовал, сейчас убрал.

а куда вы его добавляли? в какую часть?
Автор: MisHel64
Дата сообщения: 13.02.2014 20:22

Цитата:
да так и делаю, как вы предлагаете, и как описывает google подобную, казалось бы простую задачу: переадресовать с конкретного несуществующего адреса в корень....

А он именно так и делает, с той правкой, что я дал.
Но твои правила перебрасывают из корня на index.php, передавая ему параметры.
И уже он не может найти страницу соответствующую параметрам, и светит 404.

пробуй
RewriteRule ^main\.php$ http://www.sp-trans.de/index.php [R=301,L]
или
RewriteRule ^main\.php$ http://www.sp-trans.de/index.php? [R=301,L]
или
RewriteRule ^main\.php$ http://www.sp-trans.de/? [R=301,L]

Если параметры не потеряются, то ищи как их потерять. Я лично не знаю.
Или ковыряй index.php, далее два варианта.
Если потеряются, то можно дальше подумать, как по красивее сделать.
Возможно так:
RewriteRule ^main\.php$ index.php? [NC, L]

Вставлять перед этой: # If the requested path and file is not /index.php and the request
Автор: Cheery
Дата сообщения: 13.02.2014 20:32
MisHel64

Цитата:
Но твои правила перебрасывают из корня на index.php, передавая ему параметры.
И уже он не может найти страницу соответствующую параметрам, и светит 404.


сдается мне, что правило было указано ниже переброса на index.php, в этом и есть причина.
Автор: MisHel64
Дата сообщения: 13.02.2014 20:34
Cheery По барабану в принципе. Толку от этого правила было НОЛЬ. И не важно куда его втыкать.
Мы же оба внутренний редирект советовали.
Автор: Cheery
Дата сообщения: 13.02.2014 20:41
MisHel64

Цитата:
Мы же оба внутренний редирект советовали.

ну и ладно, плохо то от того, что ссылка не поменялась, не стало бы.
главное добиться сначала, чтобы 404 не было.

а втыкать.. если ниже перебрасывания на index.php, то до него и не доходит, поэтому и не работает.
Автор: MisHel64
Дата сообщения: 13.02.2014 20:48
Cheery Так тут не классический 404. И не по урлу он генерился.
А типичный 200, а потом уже якобы 404 из-за квери.


Цитата:
а втыкать.. если ниже перебрасывания на index.php, то до него и не доходит, поэтому и не работает.

Если выше, то
1й шаг наше правило /main.php на / поменяет
2й шаг его правило / на /index.php поменяет
3й шаг ничего не мнется на выходе /index.php

Если ниже
1й шаг его правило /main на /index.php поменяет
2й шаг ничего не мнется на выходе /index.php

Так что не важно где, результат один.


Автор: Cheery
Дата сообщения: 13.02.2014 20:53
MisHel64

Цитата:
А типичный 200, а потом уже якобы 404 из-за квери

ай.. надоело уже.
там ЧПУ, и на query ему все равно - он не может найти ничего из содержимого, чтобы относилось к main.php
элементарная проверка http://www.sp-trans.de/?seite=1&sprache=2
ну, нет же 404? ошибка именно из за main.php
Автор: MisHel64
Дата сообщения: 13.02.2014 21:00

Цитата:
там ЧПУ, и на query ему все равно - он не может найти ничего из содержимого, чтобы относилось к main.php

Тогда тем более, внутренний редирект ситуации не спасет, и смысла не имеет.
Автор: Cheery
Дата сообщения: 13.02.2014 21:05
MisHel64

Цитата:
Тогда тем более, внутренний редирект ситуации не спасет,

чем же не спасет?? он будет выдавать что нужно, пусть и с query куском, который можно убрать и потом, это не срочно.


Цитата:
Если ниже
1й шаг его правило /main на /index.php поменяет

если ниже, то он до него не дойдет вообще - на index.php перекидываются все несуществующие URL/пути в файловой системе
и этот index.php и генерит 404 страницу, так как не знает какой странице соответстует main.php

Weinaum
короче, добавьте первой строкой в .htaccess
RedirectMatch 301 ^/main\.php http://www.sp-trans.de/?
Автор: MisHel64
Дата сообщения: 13.02.2014 21:15

Цитата:
чем же не спасет??
А почему он должен спасти?
Во первых опять же попадаем на /index.php, в реквесте по прежнему сидит /main.php
И совершенно не важно, был внутренний редирескт на / или его не было.
Скрипт то о нем никогда не узнает.
Что бы поменялся $_SERVER['REQUEST_URI'] и аналогичные нужен именно внешний редирект. А $_SERVER['SCRIPT_NAME'] по любому будет указывать на /index.php, не важно был ли редирект, и был он внутренним или внешним.
Автор: Cheery
Дата сообщения: 13.02.2014 21:22
MisHel64
ок, я, почему то, немного о другом задумался (бывает, когда делаешь несколько дел одновременно).
но все равно ниже переброса на index.php нельзя - никогда недойдет до него.
только если main.php файктически существует.
Автор: MisHel64
Дата сообщения: 13.02.2014 21:23

Цитата:
Weinaum короче, добавьте первой строкой в .htaccess
RedirectMatch 301 ^/main\.php http://www.sp-trans.de/?

Вот и я про то. Спасет только внешний редирект.
И если вы правы, и на квери движку наплевать, то знак вопроса в конце не нужен, но и не помешает.

Хотя я бы лично затычку поставил именно на PHP, из одной строки.
Что-то типа:
<?php header('Location: http://www.sp-trans.de',true,301); exit; ?>

И поисковикам клеить проще будет, и адрес красявей получится, и мозг кипятить не надо.

Добавлено:

Цитата:
но все равно ниже переброса на index.php нельзя - никогда недойдет до него.

Как я уже писал выше, абсолютно по барабану, дойдет или нет. Результат будет один.
Если мы о первом варианте решения.
Те, что с внешним редиректом, те да, уже критично.
Автор: Weinaum
Дата сообщения: 13.02.2014 21:33
Cheery
MisHel64

Все, спасибо, все работает
вот эти 2 варианта -

Код: RewriteRule ^main\.php$ http://www.sp-trans.de/index.php? [R=301,L]
или
RewriteRule ^main\.php$ http://www.sp-trans.de/? [R=301,L]
Автор: Cheery
Дата сообщения: 13.02.2014 21:37
Weinaum

Цитата:
редиректят правильно, но урлы в адресной строке не чистят.

должны (если в конечном адресе указано ?).


Цитата:
выдает error 500

смотрите лог ошибок сервера - там указана причина
Автор: MisHel64
Дата сообщения: 13.02.2014 21:40
Weinaum Только на будущее, давайте правильно Т/З. Про джумбалу то никто как-то не подумал, из-за этого и были даны неправильные советы, и вон сколько постов нагородили, на примитивной задаче.
И чиста для прикола, попробуйте затычку на php, с первоначальным НтАцесс. Просто уж спортивный интерес.

Добавлено:

Цитата:
должны. 
Неа
Автор: Weinaum
Дата сообщения: 14.02.2014 00:30
MisHel64
Была тоже такая мысль, создать в корне main.php и там переадресовать - щас попробовал, да, тоже работает

И про joomla я в первом посту указал, на всякий случай.
Главное, работает, чтобы греки счастливы были )))

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

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


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