замена URL только в том случае, если файл был найден с помощью mod_rewrite - PullRequest
4 голосов
/ 12 ноября 2011

вот как я это делаю:

  1. пользователь вводит URL
  2. mod_rewrite обрабатывает URL формы: ^([^/\.]+)/?$ (первый сегмент в пути)
  3. и перенаправить их на страницу индекса: struct.php?page=$1
  4. на странице индекса (struct.php) Я запрашиваю содержимоеpage ($ _GET ['page']), если она существует:

    $content = @file_get_contents("pages/$_GET[page]/.content")

  5. , если контент не существует, я просто запрашиваю контент страницы 'not_found/.content'

Это работает, но я бы хотел, чтобы все было просто в скрипте и использовал возможности mod_rewrite для запроса только существующих страниц.

вот как я хотел бы это сделать:

  1. пользователь вводит URL
  2. mod_rewrite обрабатывает URL формы: ^([^/\.]+)/?$ (первыйсегмент в пути)
  3. и перенаправить их на страницу индекса , только если файл .content был найден : struct.php?page=$1

вот моя попытка:

<IfModule mod_rewrite.c>
  RewriteEngine on

  RewriteCond pages/$1/.content -f
  RewriteRule ^([^/\.]+)/?$ struct.php?page=$1 [L]
</IfModule>

note : я использую .htaccess файл

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Вот мое решение:

RewriteEngine On

RewriteCond %{REQUEST_URI} ^([^/\.]+)/?
RewriteCond %{DOCUMENT_ROOT}/%1/.content -f
RewriteRule ^([^/\.]+)/? struct.php?page=$1 [PT,QSA,L]
0 голосов
/ 13 ноября 2011

Вы пробовали следующее?

RewriteEngine on

RewriteCond %{QUERY_STRING} ^([^/\.]+)/?
RewriteCond /absolute/path/pages/$1/.content -f
RewriteRule ^.*$ struct.php?page=$1 [PT,QSA,L]

Я не проверял это, поэтому я не уверен, что это работает, но вы должны попробовать его.

Помните об изменении/ absolute / path / к абсолютному пути к папке страниц.

...