Apache 如何使用“重写规则”中的子文件夹
我正在努力使这个重写规则起作用。我想要的是(传入url): 致(幕后): 常见的是“我的网站”需要被忽略,但url仍然显示它 下面的重写规则不起作用,请帮助Apache 如何使用“重写规则”中的子文件夹,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我正在努力使这个重写规则起作用。我想要的是(传入url): 致(幕后): 常见的是“我的网站”需要被忽略,但url仍然显示它 下面的重写规则不起作用,请帮助 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^mywebsite(.*) /app.php/$1 [QSA,L] 任何帮助都会很好。谢谢 我认为更可靠、更简单的解决方案如下: 考虑
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^mywebsite(.*) /app.php/$1 [QSA,L]
任何帮助都会很好。谢谢 我认为更可靠、更简单的解决方案如下: 考虑以下两种情况: 案例1:如果需要完整的URL重定向,请使用以下重写规则
RewriteEngine On
#Redirect to app.php/the-rest-of-param
RewriteRule ^mywebsite(.*)$ http://%{HTTP_HOST}/app.php$1 [R=301,L]
请注意,URL将更改如下
到
到
到
<强>案例2 < /强>:如果你不想要一个完全重定向(即,URL不应该被改变),那么你需要考虑以下几点。
http://hostname.com/mywebsite/test
)RewriteEngine On
#No redirection, bypass request to app.php
RewriteRule ^mywebsite(.*)$ app.php
现在您需要获取参数,如/test
和/something/other
,对吗?使用下面的代码块获取它
$param = '';
if (strpos($_SERVER['REQUEST_URI'], '/mywebsite') === 0) {
//10 => length of "/mywebsite"
$param = substr($_SERVER['REQUEST_URI'], 10);
}
echo 'URL PARAM: ' . $param;
对于URL,$param将是空字符串
对于$param,将是/test
而$param将是/something/other/1234
请注意,我刚刚避免了不必要的条件请求绕过,并且在没有任何参数的情况下绕过了对app.php的所有请求(因为参数与URL一起存在)
您可以看到,$\u服务器['REQUEST\u URI']
将保存类似于/something/other/1234
的值,$\u服务器['PHP\u SELF']
将类似于/app.PHP/something/other/1234
希望这能解决您的问题…我认为更可靠、更简单的解决方案如下: 考虑以下两种情况: 案例1:如果需要完整的URL重定向,请使用以下重写规则
RewriteEngine On
#Redirect to app.php/the-rest-of-param
RewriteRule ^mywebsite(.*)$ http://%{HTTP_HOST}/app.php$1 [R=301,L]
请注意,URL将更改如下
到
到
到
<强>案例2 < /强>:如果你不想要一个完全重定向(即,URL不应该被改变),那么你需要考虑以下几点。
http://hostname.com/mywebsite/test
)RewriteEngine On
#No redirection, bypass request to app.php
RewriteRule ^mywebsite(.*)$ app.php
现在您需要获取参数,如/test
和/something/other
,对吗?使用下面的代码块获取它
$param = '';
if (strpos($_SERVER['REQUEST_URI'], '/mywebsite') === 0) {
//10 => length of "/mywebsite"
$param = substr($_SERVER['REQUEST_URI'], 10);
}
echo 'URL PARAM: ' . $param;
对于URL,$param将是空字符串
对于$param,将是/test
而$param将是/something/other/1234
请注意,我刚刚避免了不必要的条件请求绕过,并且在没有任何参数的情况下绕过了对app.php的所有请求(因为参数与URL一起存在)
您可以看到,$\u服务器['REQUEST\u URI']
将保存类似于/something/other/1234
的值,$\u服务器['PHP\u SELF']
将类似于/app.PHP/something/other/1234
希望这能解决您的问题…我不知道RewriteRule(语法看起来很像IIRF),但我认为您希望将最后一行更新为“RewriteRule/mywebsite(.*)/app.php$1[QSA,R]”。您能在服务器日志中看到示例请求的结果吗?我不能使用[R]。当我与[L]一起使用时,它会重定向到app.php,但会显示route/mywebsite not found:(查看一些在线示例,比较器路径似乎不应该以a/开头,因此您最终会得到这样的结果:RewriteRule^mywebsite(.*)$/app.php/$1不,它仍然不起作用。我已经编辑了问题以使其更清楚。感谢您的帮助,我仍然需要一个解决方案。我不知道RewriteRule(语法看起来很像IIRF),但我想您想将最后一行更新为“RewriteRule/mywebsite(.*)/app.php$1[QSA,R]”你能在你的服务器日志中看到一个示例请求的结果吗?我不能使用[R]。当我使用[L]时,它会重定向到app.php,但它会说route/mywebsite not found:(在线查看一些示例,它看起来比较器路径不应该以a/开头,所以你会得到这样的结果:RewriteRule^mywebsite(.*))$/app.php/$1No它仍然不起作用。我已经编辑了问题以使其更清楚。感谢您的帮助,我仍然需要一个解决方案一个非常好的解释!我喜欢您的版本1,但没有向用户显示app.php(无重定向?)。这可能吗?@TroodoN Mike sure!!!我也在我的服务器上测试了上述htaccess条目…:)还有一件事……几乎所有PHP框架都使用相同的技术(对用户隐藏,从代码执行的位置隐藏),因此,对于案例1,我应该删除relocate[R]不在url中显示app.php?我认为这毫无意义……案例1将所有请求重定向到
app.php/参数的其余部分
。如果您不想在url中显示app.php,那么为什么要绕过请求到app.php/参数的其余部分
,您只需要用app处理所有请求。php@TroodoN-迈克-祝贺你……”/mywebsite“更准确,而且你做得对……:)一个很好的解释!我喜欢你的版本1,但是没有向用户显示app.php(没有重定向?)。这有可能吗?@TroodoN Mike当然!!!我也在我的服务器上测试了上述htaccess条目…:)还有一件事。。。几乎所有PHP框架都使用相同的技术(对用户隐藏,事实上代码是从何处执行的),因此,对于案例1,我应该删除relocate[R]以不在url中显示app.PHP吗