2014-01-14 2 views
0

Может ли кто-нибудь объяснить, как будет работать это регулярное выражение mod_rewrite?Apache mod_rewrite описание

<IfModule rewrite_module> 
    RewriteEngine On 
    RewriteRule ^(.*)$ /Symfony/web/app_dev.php [QSA,L] 
</IfModule> 

Когда я вхожу http://localhost/hello/testingonly, то, что он будет перенаправлен?

EDIT:

В настоящее время я пытаюсь использовать Symfony Framework и опробовать онлайн-учебники. http://localhost/Symfony/web/app_dev.php/hello/testingonly фактически отображает страницу с надписью «Hello $ name» и $ name в этом случае относится к «testingonly».

Так что, если вы заходите на эту страницу http://localhost/Symfony/web/app_dev.php/hello/matthew, на странице будет сказано «Привет, Мэтью».

Следующее, что я хотел сделать, это удалить Symfony/web/app_dev.php из URL-адреса, и я скопировал и ввел правило перезаписи выше, и он просто хорошо работал.

Что я хотел знать, так это то, как он интерпретирует, какой из них является параметром имени.

Если бы я должен был посетить http://localhost/hello/mathew, и на основе правила перезаписи должно быть только http://localhost/Symfony/web/app_dev.php, и этот параметр должен быть утерян. Но как получилось, что ему удалось отобразить «Hello mathew»?

+0

Не могли бы вы быть более конкретными в том, что именно вы не понимаете? mod_rewrite довольно сложный и позволяет определять различные правила и условия перезаписи для разных целей. В приведенном выше примере используется regexp для перезаписи всех запросов в используемом контексте apache (dir/host ...) в '' 'app_dev.php'''. См. [Mod_rewrite docs] (http://httpd.apache.org/docs/current/mod/mod_rewrite.html). – matthias

+0

@ Matthias, извините за неспецифичность. Я отредактирую свой вопрос – user3169403

ответ

0

Это правило переадресовывает все в /Symfony/web/app_dev.php.

   ^(.*)$ match everything (start, any char 0~n times, end) 
      /
RewriteRule ^(.*)$ /Symfony/web/app_dev.php [QSA,L] 
              // 
      [QSA] keep GET parameters in the URL/
              /
    [L] mean "if match, does not read next rules" 

Как не у него [R=301] флага, переназначение прозрачное.

Итак:

  • http://localhost/hello/testingonly редирект: http://localhost/Symfony/web/app_dev.php, но URL остается неизменным.
  • http://localhost/hello/testingonly?foo=bar redirect to: http://localhost/Symfony/web/app_dev.php?foo=bar, но URL остается неизменным.
+0

Привет, Zessx, спасибо за ваш ответ. Я отредактировал мой вопрос выше и основывался на вашем ответе, если http: // localhost/hello/testingonly перенаправляется на http: //localhost/Symfony/web/app_dev.php, тогда мой параметр не будет потерян? Как странице удалось отобразить «Hello testingonly»? – user3169403