我第一次尝试Silex,但是我不能用一个友好的URL得到一个简单的调用来正常工作,但是如果我使用一个不友好的URL,它就会完成它的工作。我正在本地主机上做实验,这个域是
本地主机/地点
结构看起来是这样的:
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/任何东西
它正常工作并返回预期值,但是如果我尝试这样做的话
本地主机/站点/rest/任何东西
只是不停地说
没有找到用于"GET /site/rest/anything"的路由
当它工作的路由必须是/anything
时
我试过:
/php/
。RewriteRule ^ rest.php [QSA,L]
。RewriteBase /site/php/
和/site/
。谢谢。
发布于 2015-05-04 08:54:50
我不认为这是可能的,因为Silex不查找/$1
,只能查看地址栏中的内容。(除非rest.php
驻留在被请求的目录中。)
你最好的选择是重新考虑你的目录结构。如果Silex的web根目录是php
文件夹,则应该向localhost/site/php/anything
发出请求,其中.htaccess
文件位于该目录中。
或者,只需将php
文件夹重命名为rest
,并确保使用以下规则(保存在rest
目录中的.htaccess
文件):
<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}
,而无需更改当前的设置。不过,这很麻烦,这使得前面的选项成为最好的选择。
https://stackoverflow.com/questions/30034105
复制相似问题