URL перезаписать, чтобы исключить существующие каталоги - PullRequest
1 голос
/ 20 августа 2009

Я пытаюсь перенаправить URL-адреса с example.net/customname или example.net/customname/ на example.net/my/home.php?username=customname. Само по себе это не сложно:

RewriteRule ^([a-zA-Z0-9_-]+)$ my/home.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ my/home.php?username=$1

Однако я хочу исключить мои существующие каталоги и файлы, такие как example.net/about/ и example.net/files. Я не могу понять, как использовать RewriteCond (мне нужно несколько cond для перезаписи?), Чтобы исключить переписывание таких элементов, как example.net/about/, в example.net/home.php?username=about. Как я могу это сделать?

Спасибо!

РЕДАКТИРОВАТЬ: Вот точное решение ...

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([a-zA-Z0-9_-]+)/?$ my/home.php?url=$1 [NC,L]

Ответы [ 2 ]

4 голосов
/ 20 августа 2009

RewriteCond имеет некоторые специальные шаблоны именно для этой цели. Попробуйте это:

RewriteCond %REQUEST_FILENAME ! -d
RewriteCond %REQUEST_FILENAME ! -f
RewriteRule ^([a-zA-Z0-9_-]+)/?$ my/home.php?username=$1
2 голосов
/ 20 августа 2009

Вы можете использовать RewriteCond (условие перезаписи), подобное этому:

RewriteCond %{REQUEST_URI} ! ^\/(about|files)\/?$
RewriteRule ^([a-zA-Z0-9_-]+)/?$ my/home.php?username=$1 [L]

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

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

...