用于 Silex 的 Htaccess
Htaccess for Silex
我是第一次尝试 Silex,但我无法通过友好 URL 的简单呼叫来正常工作,但如果我使用非友好 URL 它完成了它的工作。我正在本地主机上进行试验,域是
localhost/site
结构如下所示:
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/ [QSA,L]
</IfModule>
如果我试着打电话
localhost/site/php/rest.php/anything
它工作正常并且 returns 预期值,但是如果我尝试这个
localhost/site/rest/anything
它一直在说
No route found for "GET /site/rest/anything"
当它工作的路线必须是/anything
我试过:
- 将 .htaccess 移动到
/php/
。
- 将 RewriteRule 更改为
RewriteRule ^ rest.php [QSA,L]
。
- 将 RewriteBase 更改为
RewriteBase /site/php/
和 /site/
。
谢谢。
我实际上认为这是不可能的,因为 Silex 不会查找 /
,并且只能看到地址栏中的内容。 (除非 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}
,而无需更改当前设置。但是,这很麻烦,这使得上一个选项成为最佳选项。
我是第一次尝试 Silex,但我无法通过友好 URL 的简单呼叫来正常工作,但如果我使用非友好 URL 它完成了它的工作。我正在本地主机上进行试验,域是
localhost/site
结构如下所示:
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/ [QSA,L]
</IfModule>
如果我试着打电话
localhost/site/php/rest.php/anything
它工作正常并且 returns 预期值,但是如果我尝试这个
localhost/site/rest/anything
它一直在说
No route found for "GET /site/rest/anything"
当它工作的路线必须是/anything
我试过:
- 将 .htaccess 移动到
/php/
。 - 将 RewriteRule 更改为
RewriteRule ^ rest.php [QSA,L]
。 - 将 RewriteBase 更改为
RewriteBase /site/php/
和/site/
。
谢谢。
我实际上认为这是不可能的,因为 Silex 不会查找 /
,并且只能看到地址栏中的内容。 (除非 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}
,而无需更改当前设置。但是,这很麻烦,这使得上一个选项成为最佳选项。