我正在尝试使这个重写规则起作用。我想要的是(传入网址):
http://hostname.com/mywebsite
http://hostname.com/mywebsite/test
http://hostname.com/mywebsite/something/another
到(幕后):
http://hostname.com/app.php
http://hostname.com/app.php/test
http://hostname.com/app.php/something/another
常见的是“mywebsite”需要被忽略但url仍然显示它
以下重写规则不起作用,请帮助
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^mywebsite(.*) /app.php/$1 [QSA,L]
任何帮助都会非常好。谢谢!
答案 0 :(得分:1)
我认为更可靠,更简单的解决方案如下:
考虑两种情况:
案例1:如果您想要完整的网址重定向,请使用以下重写规则
RewriteEngine On
#Redirect to app.php/the-rest-of-param
RewriteRule ^mywebsite(.*)$ http://%{HTTP_HOST}/app.php$1 [R=301,L]
请注意,网址将更改如下
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 :如果您不想要完全重定向(即,不应更改网址),那么您需要考虑以下几点。
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
希望这可以解决您的问题...