Преобразование правил mod_rewrite в .htaccess в httpd.conf - PullRequest
0 голосов
/ 01 декабря 2010

У меня есть набор html-файлов по адресу: www.example.com и «основной сайт» (в бета-версии) по адресу: www.example.com/abcd/ (для которого нужны эти правила mod_rewrite)

Правила mod_rewrite отлично работают в каталоге внутри .htaccess.Мне нужно поместить их в httpd.conf:

Правила выглядят так в .htaccess:

RewriteEngine On
RewriteBase /abcd/

RewriteRule ^.*/codelibrary/(.*)$ codelibrary/$1 [L]
RewriteRule ^.*/in_upload/images/(.*)$ in_upload/images/$1 [L]
...

Копирование приведенного ниже в файл httpd.conf не сработало:

<VirtualHost *:80>
 ServerAlias   www.example.com
 ServerAdmin   nobody@example.com
 DocumentRoot /var/www/html
 ServerSignature On

 <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /abcd/
    ...

Это выдало ошибку:

RewriteBase: only valid in per-directory config files

Нужно ли мне изменять все правила следующим образом?

RewriteRule ^.*/abcd/codelibrary/(.*)$ abcd/codelibrary/$1 [L]
RewriteRule ^.*/abcd/in_upload/images/(.*)$ abcd/in_upload/images/$1 [L]

Edit1

Я пытался преобразовать следующие строки из:

...
RewriteRule (.*)ins.html$ browse.php?type=ins [L]
...
RewriteRule ^([a-zA-Z\-]*)/([a-zA-Z0-9\s]*)/([0-9]*)\.html$ browse.php?type=$1&catId=$3 [L]
RewriteRule ^([a-zA-Z\-]*)/([a-zA-Z0-9\s]*)/([a-zA-Z0-9\s]*)/([0-9]*)/([0-9]*)\.html$ browse.php?type=$1&catId=$4&subCatId=$5 [L]
...

В:

...
RewriteRule ^/abcd/ins.html$ abcd/browse.php?type=ins [L]
...
RewriteRule ^/abcd/([a-zA-Z\-]*)/([a-zA-Z0-9\-\s]*)/([0-9]*)\.html$ abcd/browse.php?type=$1&catId=$3 [L]
RewriteRule ^/abcd/([a-zA-Z\-]*)/([a-zA-Z0-9\-\s]*)/([a-zA-Z0-9\-\s]*)/([0-9]*)/([0-9]*)\.html$ abcd/browse.php?type=$1&catId=$4&subCatId=$5 [L]
...

, но я получил следующие ошибки:

Когда я пытаюсь получить доступhttp://www.example.com/abcd/ins/Sustainability/282.html, я получаю следующую ошибку в журнале:

IPADDRESS - - [DATETIME] [www.example.com/sid#2b3cde3c1be0][rid#2b3cec076e70/initial] (2) init rewrite engine with requested uri /abcd/ins/Sustainability/282.html
IPADDRESS - - [DATETIME] [www.example.com/sid#2b3cde3c1be0][rid#2b3cec076e70/initial] (2) rewrite '/abcd/ins/Sustainability/282.html' -> 'abcd/browse.php?type=ins&catId=282'
IPADDRESS - - [DATETIME] [www.example.com/sid#2b3cde3c1be0][rid#2b3cec076e70/initial] (2) local path result: abcd/browse.php

Когда я пытаюсь получить доступ к http://www.example.com/abcd/ins.html, я получаю следующую ошибку в журнале:

IPADDRESS - - [DATETIME] [www.example.com/sid#2b3cde3c1be0][rid#2b3cec076e70/initial] (2) init rewrite engine with requested uri /abcd/ins.html
IPADDRESS - - [DATETIME] [www.example.com/sid#2b3cde3c1be0][rid#2b3cec076e70/initial] (2) rewrite '/abcd/ins.html' -> 'abcd/browse.php?type=ins'
IPADDRESS - - [DATETIME] [www.example.com/sid#2b3cde3c1be0][rid#2b3cec076e70/initial] (2) local path result: abcd/browse.php

Я установил для RewriteLogLevel значение 2

Неизмененная версия наших правил mod_rewrite: https://webmasters.stackexchange.com/questions/4237/url-rewritten-pages-take-much-longer-to-load

1 Ответ

0 голосов
/ 01 декабря 2010

Какова цель правил перезаписи (т.е. чего вы пытаетесь достичь)?

Судя по оригиналу в .htaccess, он делал для перенаправления: www.example.com/abcd/anything/codelibrary/aaaa в www.example.com/abcd/codelibrary/aaaa

То же самое для in_upload / images, это правильно?

Если так, то это должно работать:

RewriteRule ^/abcd/.*/codelibrary/(.*)$ /abcd/codelibrary/$1 [L]
RewriteRule ^/abcd/.*/in_upload/images/(.*)$ /abcd/in_upload/images/$1 [L]
...