【问题标题】:Htaccess for Silex用于 Silex 的 Htaccess
【发布时间】:2015-05-05 00:54:50
【问题描述】:

我是第一次尝试 Silex,但我无法通过友好的 URL 进行简单的调用以正常工作,但如果我使用非友好的 URL,它就可以了。我在 localhost 中试验,域是

本地主机/站点

结构如下:

site
|- ...
|- .htaccess
|- /php/
   |- rest.php

.htaccess 代码:

<IfModule mod_rewrite.c>
  Options -MultiViews
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^rest/(.*)$ php/rest.php/$1 [QSA,L]
</IfModule>

如果我尝试打电话

localhost/site/php/rest.php/anything

它工作正常并返回预期值,但如果我尝试这个

本地主机/站点/休息/任何东西

只是一直在说

找不到“GET /site/rest/anything”的路线

当它工作的路线必须是/anything

我试过了:

  • 将 .htaccess 移至 /php/
  • 将 RewriteRule 更改为 RewriteRule ^ rest.php [QSA,L]
  • 将 RewriteBase 更改为 RewriteBase /site/php//site/

谢谢。

【问题讨论】:

  • 我认为 RewriteBase 应该是/site/...
  • @MikeRockett True,现在正在编辑,谢谢:)
  • .htaccess 文件位于site 目录中时,我特别指出您的RewriteBase 应该是/site/(而不是/site/php/)。
  • @MikeRockett 我也试过了,没有结果。

标签: php .htaccess rest mod-rewrite silex


【解决方案1】:

我实际上并不认为这是可能的,因为 Silex 不会查找 /$1,并且只能查看地址栏中的内容。 (除非rest.php 位于被请求的目录中。)

您最好的选择可能是重新考虑您的目录结构。如果 Silex 的 Web 根目录是 php 文件夹,则应向 localhost/site/php/anything 发出请求,.htaccess 文件位于该目录中。

或者,只需将php 文件夹重命名为rest,并确保使用以下规则(.htaccess 文件保存在rest 目录中):

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteBase /site/rest/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ rest.php [L]
</IfModule>

最后,您可以在 Silex 中将路由定义为 site/rest/{anything},而无需更改当前设置。不过,这很麻烦,这使得前一个选项成为最佳选项。

【讨论】:

  • 您的解决方案解决了我的问题,我不想将php 文件夹重命名为rest,现在它可以完美运行了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多