mod_rewrite: Как сопоставить файл в каталоге или в корне в зависимости от «доступности»? - PullRequest
0 голосов
/ 07 декабря 2010

Здравствуйте, долгое время слушатель, впервые звонивший сюда!
Спасибо за отличный совет, которым вы все поделитесь.

У меня настроены эти правила mod_rewrite:

RewriteRule ^([^/.]+)/([^/.]+)/?$ $1--$2.php?%{QUERY_STRING} [L]
RewriteRule ^([^/.]+)/?$ $1.php?%{QUERY_STRING} [L]

Они делают / company / services / перенаправления на компанию - services.php. Или / company / to company.php. Работает отлично.

Но теперь я хотел бы применить другое правило: если бы я поместил services.php в физический каталог / company /, он бы совпадал и перенаправлял это. И если это не удастся, поищите мое первоначальное правило. (И в противном случае верните 404.)

Я подумал, что это будет так же просто, как включить:

RewriteRule ^([^/.]+)/([^/.]+)/?$ $1/$2.php?%{QUERY_STRING} [L]

но не так. Это возвратит 404 вместо этого. Я немного озадачен, поскольку это противоречит тому, как я считал, что mod_rewrite работает (если правило не соответствует, перейдите к следующему.)
Спасибо за любые ссылки!

1 Ответ

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

Нашел это. Для справки, это полный набор правил:

RewriteCond %{DOCUMENT_ROOT}/$1/$2.php -f
RewriteRule ^([^/.]+)/([^/.]+)/?$ /$1/$2.php?%{QUERY_STRING} [L]
RewriteRule ^([^/.]+)/([^/.]+)/?$ $1--$2.php?%{QUERY_STRING} [L]
RewriteRule ^([^/.]+)/?$ $1.php?%{QUERY_STRING} [L]
...