Apache mod_rewrite не поддерживает существующие файлы с помощью -f -and -d - PullRequest
1 голос
/ 17 августа 2011

Я бы хотел перенаправить URL-адреса, для которых не существует файлов или каталогов, с целью реализации кэша.Конфигурация (в httpd.conf, а не .htaccess) выглядит следующим образом:

    <Directory /srv/xxx/htdocs>
            Options FollowSymLinks +Indexes

            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME}     !-f
            RewriteCond %{REQUEST_FILENAME}     !-d
            RewriteRule ^text/([0-9]+)$             /page.php?id_text=$1  [QSA]
            RewriteRule ^([^/]+/)*([A-Za-z0-9_]+)$  /page.php?url=$2 [QSA]
    </Directory>

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

В чем может быть причина?

Запрос http://ovula.xxx.net/Ovula/Kinderwunsch__ich_will_schwanger_werden

Файл присутствует:

sascha@v291:/srv/ovula.xxx.net/htdocs$ pwd
/srv/ovula.xxx.net/htdocs
sascha@v291:/srv/ovula.xxx.net/htdocs$ ls Ovula
Kinderwunsch__ich_will_schwanger_werden
sascha@v291:/srv/ovula.xxx.net/htdocs$

Из журнала перезаписи:

80.134.205.165 - - [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (2) init rewrite engine wit
h requested uri /Ovula/Kinderwunsch__ich_will_schwanger_werden
80.134.205.165 - - [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) applying pattern '^text
/([0-9]+)$' to uri '/Ovula/Kinderwunsch__ich_will_schwanger_werden'
80.134.205.165 - - [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) applying pattern '^([^/
]+/)*([A-Za-z0-9_]+)$' to uri '/Ovula/Kinderwunsch__ich_will_schwanger_werden'
80.134.205.165 - - [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (1) pass through /Ovula/Kin
derwunsch__ich_will_schwanger_werden
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) [perdir /srv/ovula.
xxx.net/htdocs/] strip per-dir prefix: /srv/ovula.xxx.net/htdocs/Ovula/Kinderwunsch__ich_will_schwanger_werden -> Ovula/Kinderw
unsch__ich_will_schwanger_werden
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) [perdir /srv/ovula.
xxx.net/htdocs/] applying pattern '^text/([0-9]+)$' to uri 'Ovula/Kinderwunsch__ich_will_schwanger_werden'
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) [perdir /srv/ovula.
xxx.net/htdocs/] strip per-dir prefix: /srv/ovula.xxx.net/htdocs/Ovula/Kinderwunsch__ich_will_schwanger_werden -> Ovula/Kinderw
unsch__ich_will_schwanger_werden
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) [perdir /srv/ovula.
xxx.net/htdocs/] applying pattern '^([^/]+/)*([A-Za-z0-9_]+)$' to uri 'Ovula/Kinderwunsch__ich_will_schwanger_werden'
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (2) [perdir /srv/ovula.
xxx.net/htdocs/] rewrite 'Ovula/Kinderwunsch__ich_will_schwanger_werden' -> '/page.php?url=Kinderwunsch__ich_will_schwanger_werden'
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) split uri=/page.php?url=Kinderwunsch__ich_will_schwanger_werden -> uri=/page.php, args=url=Kinderwunsch__ich_will_schwanger_werden

1 Ответ

2 голосов
/ 17 августа 2011

Условия RewriteCond применяются только к одному правилу. Если вы хотите, чтобы они применялись ко всем последующим правилам набора, вы можете использовать что-то вроде этого:

        RewriteCond %{REQUEST_FILENAME}     -f [OR]
        RewriteCond %{REQUEST_FILENAME}     -d
        RewriteRule . - [L]

        RewriteRule ^text/([0-9]+)$             /page.php?id_text=$1  [QSA]
        RewriteRule ^([^/]+/)*([A-Za-z0-9_]+)$  /page.php?url=$2 [QSA]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...