示例:http://phpdiscussionboard.azurewebsites.net/?/dashboards/dashboard
如何摆脱我通过Azure部署的PHP应用程序的URL模式中的?
?有了它我的路由不起作用。当我手动删除?
并发送URL请求时,它可以正常工作,但是在网址模式中使用?
会导致整个应用程序混乱。
答案 0 :(得分:0)
考虑到您必须替换?
的第一个实例,您可以使用以下功能:
function replaceFirst( $url, $to, $by ) {
$url = explode( "/", $url );
$arr = array();
for( $i = 0; $i < count($url); $i++ ) {
$current = $url[ $i ];
if( $current == $to ) {
if ( $by == "" ) { continue; }
else { $current = $by; }
} else if( $current == null ) { continue; }
array_push( $arr, $current );
}
return implode( $arr, "/" );
}
你可以像这样使用它:replaceFirst("http://phpdiscussionboard.azurewebsites.net/?/dashboards/dashboard", "?", "")
它会给你一个像http:/phpdiscussionboard.azurewebsites.net/dashboards/dashboard
这样的值。你可以在那里修复http:/
的小错误,但这应该是逻辑。
如果这不是您正在寻找的答案,我真的很抱歉,但您提出的问题相当含糊。
答案 1 :(得分:-1)
由于Azure Web Apps使用IIS来托管PHP应用程序,我们可以利用web.config
来管理我们的网站。
我在stackoverflow上找到了与你类似的要求,我利用this answer,将.htaccess内容转换为web.config,然后我在Azure Web应用上测试,它运行正常。但我没有修改base_url
中index_page
和config.php
的设置。
因此,在应用程序的根目录中创建一个名为web.confg
的文件,其中包含以下内容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="rule 1R" stopProcessing="true">
<match url="^(.*)$" />
<action type="Rewrite" url="/index.php/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
然后单击站点管理门户底部导航栏上的RESTART按钮。