Войти

Показать полную графическую версию : mod_rewrite etc.


Страниц : 1 2 3 4 5 6 [7] 8 9 10

Sham
30-11-2009, 14:39
RewriteRule ^vmchk\/([^\/]+)(\.html)? http://example.com/$1.html [R,L]

d0ublezer0
30-11-2009, 14:50
Sham, не помогает :(
Также и ставится два расширения.
Вот весь мой htaccess

##
# @version $Id: htaccess.txt 10492 2008-07-02 06:38:28Z ircmaxell $
# @package Joomla
# @copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.
# @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
# Joomla! is Free Software
##


#####################################################
# 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 set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%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})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]

RewriteRule ^vmchk\/([^\/]+)(\.html)? http://example.com/$1.html [R,L]
#
########## End - Rewrite rules to block out some common exploits

# 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
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
#
########## End - Joomla! core SEF Section

Sham
30-11-2009, 15:20
да, работает не так, как ожидалось (

тогда два варианта

1. если в именах в ссылках недопускаются точки, кроме расширений .html, то можно так
RewriteRule ^vmchk\/([^\/\.]+) http://example.com/$1.html [R,L]

2. если точки допускаются, то получится два правила

RewriteRule ^vmchk\/([^\/]+\.html)$ http://example.com/$1 [R,L]

RewriteRule ^vmchk\/([^\/]+) http://example.com/$1.html [R,L]

total_abandon
30-03-2010, 14:07
Здравствуйте люди у меня такой вопрос. Есть такие правила.
RewriteRule /(.*)$ /index.php?lang=$1
RewriteRule /(.*)/(.*)$ /index.php?page=$1&amp;lang=$2
че то не работает. если удаляю первое правило, второе нормально работает но вместе - Internal Server Error.. или работает ненормально, не выводятся картинки.. посоветуйте что нибудь.

Sham
30-03-2010, 14:21
ибо бесконечный цикл и мало конкретики в правилах...
+ передний слеш, если в конфиге сервера, а не htaccess, иначе уберите везде...

RewriteRule ^/([^\/]*)$ /index.php?lang=$1
RewriteRule ^/([^\/]+)/([^\/]*)$ /index.php?page=$1&amp;lang=$2

total_abandon
30-03-2010, 14:44
спасибо за столь быстрый отзыв. снял слеши, Intern. Server Error. поставил слеши обратно и сделал как сказано. вот полный код.

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/([^\/]*)$ /index.php?lang=$1
RewriteRule ^/([^\/]+)/([^\/]*)$ /index.php?page=$1&amp;lang=$2

так вообще обе правила не работают. у меня всe w .htaccess.

Sham
30-03-2010, 15:01
уточните условия, непонятно, что требуется...
у вас на первое RewriteRule действуют 2 верхних условия RewriteCond (что не файл и не папка), а второе RewriteRule по-любому работает...

total_abandon
30-03-2010, 15:05
вообщем у меня такая штука, есть index.php?page=Products&lang=rus и index.php?lang=rus . нужно чтоб они работали если в первом случае то site.com/products/rus, и site.com/rus соответственно. как именно сделать чтоб работало, ссылки на сайте изменены соответсвенным образом.

Sham
30-03-2010, 15:23
по идее достаточно этих строк (без всего остального)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(([^\/]+)\/)?([^\/]+)$ index.php?page=$2&amp;lang=$3 [L]

хотя и от самого скрипта index.php зависит тоже...

RewriteCond - это на случай если такой реальный путь существует (чтобы не было конфликтов)...

total_abandon
30-03-2010, 15:35
а что index.php ??он у меня получает данные методом GET и все, но что-то не хочет работать чертов mod_rewrite.
у меня работает тока так.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /(*.)/(*.)$ /index.php?page=$1&lang=$2

и только с двумя переменными в адресной строке, все работает и картинки и ссылки.. но как только ссылка типа index.php?lang=rus сразу not found ...

Sham
30-03-2010, 16:02
у меня правило рабочее (проверено), только небольшие поправки (см. пост выше)...

total_abandon
30-03-2010, 16:05
может нужны какие то доп. настройк чтоб твой код работал у меня?? у меня апач 2.2.9

Sham
30-03-2010, 16:12
а что index.php ?? »
в смысле, как скрипт определяет пустые GET-переменные (isset/empty). В том случае isset - true, и empty - true (переменная существует, но пустая), а если с двумя правилами, то isset - false, а empty - true (мб переменной не существовать в одном правиле)... т.е. если везде empty, то надежнее...

нужны какие то доп. настройк чтоб твой код работал у меня?? »
никаких

вот .htaccess

Options +FollowSymLinks
RewriteOptions MaxRedirects=3

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(([^\/]+)\/)?([^\/]+)$ index.php?page=$2&amp;lang=$3 [L]

total_abandon
30-03-2010, 16:46
нет у меня типа этого. -
$page = $_GET['page'];
if(page == "products")
{
...
}

Sham
30-03-2010, 17:45
if(page == "products") »
$page (ошибочка)

если $_GET['page'] не существует, то будет e_notice. Нужно проверять наличие (empty/isset).

хотя можно и заткнуть (@$_GET['page'])

droZel
30-03-2010, 18:39
Здравствуйте. Уже третий день парюсь, ничего не могу поделать.
Делаю ЧПУ с помощью mod_rewrite.
Мне нужно, чтобы ссылки site.ru/ru/page ссылались на index.php?lang=ru&page=page
При отсутствии последней переменной пусть посылается только одна.

.htaccess:

DirectoryIndex /ru/

RewriteEngine On
RewriteBase /

RewriteRule ^([A-Za-z]+)/?$ index.php?lang=$1 [L]
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)/?$ index.php?lang=$1&page=$2 [L]

все хорошо, переменные присылаются, но также подменяются и папки, тоесть при запросе site.ru/ru/about/

мы какбы находимся в папке ru/about.
Со всеми вытекающими: не находит страницы и стили.
Заранее благодарен)

Sham
30-03-2010, 19:39
можно добавить проверку на наличие файла (или другие условия),

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([A-Za-z]+)(/([A-Za-z]+))?/?$ index.php?lang=$1&page=$3 [L]

или конкретно определить возможные псевдо-папки

RewriteRule ^(ru|en)/?$ index.php?lang=$1 [L]
RewriteRule ^(ru|en)/(page|other)/?$ index.php?lang=$1&page=$2 [L]

droZel
31-03-2010, 04:57
Ну это все варианты варианты, но меня мучает один вопрос.
Почему /ru/page1/ он пересылает в файл, но ../ для него становится этими папками?

total_abandon
31-03-2010, 08:46
у меня вообще не работает код sham-а, только работает указанный мною, все эты скобки, квадратные круглые все это не работает. мне нужно чтоб нормально работали эти два правила вместе... но никак .... одно правило со всем справляется тока когда меняешь язык и остается одна переменная GET выдает что не найденна такая папка на сервере... посоветуйте что нибудь все перепробовал.

Sham
31-03-2010, 14:47
Почему /ru/page1/ он пересылает в файл, но ../ для него становится этими папками? »
если вопрос об относительных ссылках на css, скрипты и картинки, то безусловно они не будут работать, поскольку для браузера это директории, хоть и псевдо. Поэтому все относительные ссылки надо заменить на корневые, с передним слешем... <script src="/file.js">

у меня вообще не работает код sham-а, только работает указанный мною, все эты скобки, квадратные круглые все это не работает. »
читайте логи сервера, смотрите настройки, мб у вас htaccess вообще запрещены, а работают правила, прописанные в конфиге... у DirectoryIndex непонятное значение...

Если код не работает у вас, это не значит, что он неправильный.




© OSzone.net 2001-2012