我认为一个更可靠且非常简单的解决方案如下:
考虑以下两种情况:
案例 1:如果您想要完整的 URL 重定向,请使用以下重写规则
RewriteEngine On
#Redirect to app.php/the-rest-of-param
RewriteRule ^mywebsite(.*)$ http://%{HTTP_HOST}/app.php$1 [R=301,L]
请注意,URL将更改如下
http://hostname.com/mywebsite到http://hostname.com/app.php
http://hostname.com/mywebsite/test到http://hostname.com/app.php/test
http://hostname.com/mywebsite/something/another到http://hostname.com/app.php/something/another
案例 2:如果您不想要完全重定向(即不应更改 URL),那么您需要考虑以下几点。
- 在这种情况下,请求的 URL 将被保留(即 url 应该类似于
http://hostname.com/mywebsite/test
)
- 由于最终用户不应该知道内部发生了什么,
do not need to bypass your request to app.php/test
因此您没有服务器开销,而是绕过您对 app.php 的请求(我将在下面用 PHP 代码解释其余部分)
只需使用以下规则
RewriteEngine On
#No redirection, bypass request to app.php
RewriteRule ^mywebsite(.*)$ app.php
现在您需要获取类似/test
和/something/another
正确的参数吗?使用以下代码块抓取它。
$param = '';
if (strpos($_SERVER['REQUEST_URI'], '/mywebsite') === 0) {
//10 => length of "/mywebsite"
$param = substr($_SERVER['REQUEST_URI'], 10);
}
echo 'URL PARAM: ' . $param;
对于 URL http://hostname.com/mywebsite $param 将是空字符串
对于http://hostname.com/mywebsite/test $param 将是/test
对于http://hostname.com/mywebsite/something/another/1234 $param 将是/something/another/1234
请注意,我刚刚避免了不需要的条件请求绕过,只是绕过了对 app.php 的所有请求,没有任何参数(因为参数与 URL 一起存在)
你可以看到$_SERVER['REQUEST_URI']
将保持价值类似于/something/another/1234
并且$_SERVER['PHP_SELF']
将类似于/app.php/something/another/1234
希望这可以解决您的问题...