URL переписывать только каталоги - PullRequest
1 голос
/ 30 августа 2011

В настоящее время мой корневой веб-каталог содержит .htaccess, который перенаправляет в папку моего приложения, например:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^$   app/    [L]
    RewriteRule (.*) app/$1  [L]
</IfModule>

А внутри каталога / app у меня есть еще один .htaccess, который имеет следующее:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

</IfModule>

На данный момент, вернувшись в свой PHP, я могу использовать $ _GET ['url'] для получения запрошенного URL. Это все хорошо и хорошо. Однако то, что я хочу сделать, это переписать его, только если запрошенный URL-адрес является каталогом, и если запрошенный URL-адрес находится в файле, он будет фактически перенаправлен на этот файл для просмотра. Я не уверен, что это можно сделать исключительно через .htaccess, или в php есть способ выполнить проверку is_file, а затем выполнить перенаправление заголовка в файл?

Прямо сейчас, если я выполню is_file проверку и перенаправлю заголовок, я попаду в цикл, потому что htaccess в webroot явно хочет перенаправить в каталог / app

Как лучше всего это сделать?

1 Ответ

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

Я до сих пор не на 100% уверен в том, что именно требуется, надеюсь, это то, что вы спрашиваете.Если нет - дайте мне знать.

Добавьте еще одно правило в корень веб-сайта .htaccess, чтобы Apache игнорировал запросы к существующим файлам:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # do not rewrite requests to existing files
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule . - [L]

    RewriteRule ^$ app/ [L]
    RewriteRule (.+) app/$1 [L]
</IfModule>

Очевидно, если файл был запрошен (напримерexample.com/test.php) но его не существует, перезапись все равно будет происходить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...