LINUX.ORG.RU

Помогите с правилами .htaccess

 ,


0

1

Добрый день.

Имеется одна ущербная недоцмс. Необходимо организовать редирект из любой несуществующей страницы на /404.htm. У меня всё получилось организовать кроме ссылок вроде:

http://example.com/sdfsdf.html,%sdfsdaw223

Выход придумал, а как реализовать не получается.

Поскольку все страницы сайта заканчиваются на ".htm" и иных вариантов быть не может - нужно написать следующее условие:

* если конец строки не ".htm" - редиректим всё на /404.htm

Выглядеть должно как-то так (но тут явно присутствует ошибка):

RewriteEngine On
#RewriteRule !.(htm) /404.htm  [R=301,L]
RedirectMatch 301 !(.*)\.htm$ /404.htm

Благодарю!

★★★★★
Ответ на: комментарий от fMad

Добавил. Делаю запрос на /email.htmlsdfsdfsdf и в логах:

[Sun Feb 09 13:29:44 2014] [debug] core.c(3118): [client 127.0.0.1] redirected from r->uri = /404.html
[Sun Feb 09 13:29:44 2014] [debug] core.c(3118): [client 127.0.0.1] redirected from r->uri = /404.html
[Sun Feb 09 13:29:44 2014] [debug] core.c(3118): [client 127.0.0.1] redirected from r->uri = /404.html
[Sun Feb 09 13:29:44 2014] [debug] core.c(3118): [client 127.0.0.1] redirected from r->uri = /404.html
[Sun Feb 09 13:29:44 2014] [debug] core.c(3118): [client 127.0.0.1] redirected from r->uri = /404.html
[Sun Feb 09 13:29:44 2014] [debug] core.c(3118): [client 127.0.0.1] redirected from r->uri = /404.html
[Sun Feb 09 13:29:44 2014] [debug] core.c(3118): [client 127.0.0.1] redirected from r->uri = /404.html
[Sun Feb 09 13:29:44 2014] [debug] core.c(3118): [client 127.0.0.1] redirected from r->uri = /404.html
[Sun Feb 09 13:29:44 2014] [debug] core.c(3118): [client 127.0.0.1] redirected from r->uri = /404.html
[Sun Feb 09 13:29:44 2014] [debug] core.c(3118): [client 127.0.0.1] redirected from r->uri = /email.htmlsdfsdfsdf
soko1 ★★★★★
() автор топика
Ответ на: комментарий от fMad

Вот весь .htaccess если что:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://nano-protech.by/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

RewriteRule ^index.htm / [R=301,L]

#RewriteRule ^catalog/index.htm /catalog/ [R=301,L]
RewriteRule /catalog/ /catalog/index.htm [R=301,L]

RewriteRule ^.htaccess$ - [F]

RewriteRule ^goto/$ goto/index.php

RewriteRule ^(.*).htm$ index.php

RewriteRule ^(.*)/$ index.php

Redirect 301 /statia/email.htm http://nano-protech.by/email.htm

#Redirect 301 /catalog/mariel.htm /catalog/sea/mariel.htm

#RedirectMatch 301 ^/(.*)$ /$1.htm

#Redirect 301 /statia/email.htm http://nano-protech.by/email.htm

#ErrorDocument 404 http://nano-protech.by/404.htm

#RewriteCond %{REQUEST_URI} !\.[^/]+$
#RewriteRule (.+) /404.htm [R=301,L] 
RewriteEngine On
#RewriteRule !.(htm) /404.htm  [R=301,L] 
RedirectMatch 301 !(.*)\.htm$ /404.htm
#RewriteRule !^(.*).htm /404.htm

RewriteEngine On
RewriteCond %{HTTP_HOST} ^rnano-protech.by$ [NC]
RewriteRule ^(.*)$ nano-protech.by/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /404.html [L]
soko1 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

И к чему этот линк?

Как создавать 404-код в курсе, мне этот вариант не подходит, потому как он просто не работает.

soko1 ★★★★★
() автор топика
Последнее исправление: soko1 (всего исправлений: 1)
RewriteEngine On
RewriteCond %{REQUEST_URI} !.*\.htm$ [NC]
RewriteRule ^(.*)$ /404.htm [R=301,L]

Это если решать твою задачу дословно.

.htm

Фублин, фунафиг

ogiel
()
Ответ на: комментарий от ogiel

Это если решать твою задачу дословно.

Теперь перенаправляет вообще всё на 404.htm

Фублин, фунафиг

Не то слово. Видел бы ты это чудо в перьях, я уже проклинаю тот день когда согласился за эту штуку взяться чтобы помочь.

Знай врага в лицо: http://nanocms.name/

soko1 ★★★★★
() автор топика
Ответ на: комментарий от soko1

Так ещё попробуй. Чтобы каталоги и главную не проносило

RewriteEngine On
RewriteCond %{REQUEST_URI} !^.*\.htm$
RewriteCond %{REQUEST_URI} !^.*\/$ 
RewriteRule ^(.*)$ /404.htm [R=301,L]
ogiel
()
Ответ на: комментарий от ogiel

Всё равно не работает. При любом запросе пишет в лог следующее:

127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363
127.0.0.1 - - [11/Feb/2014:15:59:19 +0300] "GET /404.htm HTTP/1.1" 301 363

Может в правилах выше есть какой-то конфликт?

soko1 ★★★★★
() автор топика
Ответ на: комментарий от ogiel

В общем пришлось поизвращаться, чтобы получилось то что хотел реализовать.

Выше было правило:

RewriteRule ^(.*).htm$ index.php

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

RewriteRule ^(.*).htm index.php

И дописал в начало файла index.php следующий код:

function getExtension1($filename) {
   return end(explode(".", $filename));
}
if (strcmp($_SERVER[REQUEST_URI], "/")) {
        $ext_ = getExtension1($_SERVER[REQUEST_URI]);
        if (strcmp($ext_, "htm")) {
                header("HTTP/1.1 301 Moved Permanently");
                header('Location: http://nano-protech.by/404.htm');
        }
}

Это конечно жёсткий хак, но вроде заработало :)

soko1 ★★★★★
() автор топика
Последнее исправление: soko1 (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.