Почему этот простой RewriteRule не работает? - PullRequest
0 голосов
/ 11 августа 2010

Это должно быть просто, но я не могу понять это.У меня есть очень простое правило mod_rewrite, и оно просто не хочет работать.Это все содержимое файла .htaccess.

RewriteEngine On
RewriteRule ^([A-Za-z0-9-_/\.]+)/?$ index.php?page=$1 [L]

Если я позвоню по URL-адресу domain.com/foo, он должен переписать его в index.php? Page = foo.Но вместо этого он переписывает его в index.php? Page = index.php.Я пробовал несколько URL-адресов:

  • index.php? Page = foo
  • index.php
  • / foo
  • /

Во всех случаях PHP действует так, как будто для «page» установлено значение «index.php».Это не ошибка в index.php, потому что я заменил все содержимое index.php сценарием, который просто повторяет значение страницы, и он все еще выглядит как index.php.

Действительно потерянгде я иду не так, любая помощь будет потрясающей!

Спасибо

Адриан

Ответы [ 2 ]

2 голосов
/ 11 августа 2010

Любая причина, по которой вы не можете использовать что-то более простое, например:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [L]

Если вы пытаетесь предотвратить переписывание существующих страниц, то !-f позаботится об этом (if file does not exist и if directory does not exist, затем re-write)

0 голосов
/ 11 августа 2010

Я думаю, это то, что вы ищете.К сожалению, это не очень хорошо работает, если URL имеет другие аргументы GET (IE, /some/url/path?page=1).

RewriteEngine On
RewriteRule ^(.*)$ index.php?page=$1 [L]

Лучшая идея.

RewriteEngine On
RewriteRule ^(.*)$ index.php [L,QSA]

Флаг QSA будет пересылать параметры GET, а затем в index.php использовать $_SERVER['REQUEST_URI'] и parse_url для направления запроса.

С http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html:

'qsappend|QSA' (query string append)
This flag forces the rewriting engine to append a query string part
in the substitution string to the existing one instead of replacing it.
Use this when you want to add more data to the query string via a rewrite rule.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...