Переписать правила перепутаны - PullRequest
0 голосов
/ 30 октября 2010

Я изо всех сил пытаюсь достичь этой простой вещи ...

У меня есть несколько статических страниц, которые должны быть похожи на
www.domain.com/profile и т. д. Проблема в том, как написать правила перезаписи для того, чтобы ..

Было бы исправлено несколько переписываний как / home

Я хочу, чтобы каждый существующий файл не перезаписывался www.domain.com/test.php следует перейти к test.php

Наконец, если он не найден, я хочу, чтобы он был перенаправлен на static.php? _.....

RewriteRule ^/home/?$ /index.php?__i18n_language=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/([^/]+)/?$ /static.php?__i18n_language=$1  

Это работает нормально, но если я наберу index.php или test.php или даже mach из другого перенаправления, он попадет в static.php ... Пожалуйста, помогите!

Ответы [ 2 ]

1 голос
/ 30 октября 2010

Согласно вашему описанию вы можете использовать эти правила:

# stop rewriting process if request can be mapped onto existing file
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteRule ^ - [L]

# rewrite known paths /home, /foo, /bar, etc.
RewriteRule ^/(home|foo|bar|…)$ /index.php [L]

# rewrite any other path
RewriteRule ^ /static.php [L]
1 голос
/ 30 октября 2010

Я давно этим не пользовался, но я нашел кое-что, что должно помочь.Он является частью старого скрипта, который генерирует .httaccess файлы для перенаправления из / usr / share / doc только тогда, когда документ не найден: правило «Проверитьцелевой URL существует, затем оставьте ":

RewriteEngine On
RewriteBase /doc/User_Documents

### If the directory already exists, then leave
### We're just redirecting request when the directory exists but has been renamed.

RewriteCond %{REQUEST_FILENAME} User_Documents/([^/]+-[0-9][^/]*)
RewriteCond $PWD/%1 -d
RewriteRule .* - [L]

Это [L], что означает" оставить ", если выполняется одно из условий.В старом сценарии есть сотни сгенерированных правил (после [L]), которые пропускаются, потому что одно из условий соответствует.В вашем случае вы пропустите остальные правила, когда цель %{REQUEST_FILENAME} найдена.

Итак, я предлагаю перед правилом перенаправления:

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