Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 如何使用“重写规则”中的子文件夹_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache 如何使用“重写规则”中的子文件夹

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] 任何帮助都会很好。谢谢 我认为更可靠、更简单的解决方案如下: 考虑

我正在努力使这个重写规则起作用。我想要的是(传入url):

致(幕后):

常见的是“我的网站”需要被忽略,但url仍然显示它

下面的重写规则不起作用,请帮助

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不应该被改变),那么你需要考虑以下几点。

  • 在这种情况下,请求的URL将被保留(即,URL应该类似于
    http://hostname.com/mywebsite/test
  • 由于最终用户不应该知道里面发生了什么,因此您不需要绕过对app.php/test的请求,因此没有服务器开销,而是绕过对app.php的请求(下面我将用php代码解释其余内容)
  • 简单地使用下面的规则

    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不应该被改变),那么你需要考虑以下几点。

  • 在这种情况下,请求的URL将被保留(即,URL应该类似于
    http://hostname.com/mywebsite/test
  • 由于最终用户不应该知道里面发生了什么,因此您不需要绕过对app.php/test的请求,因此没有服务器开销,而是绕过对app.php的请求(下面我将用php代码解释其余内容)
  • 简单地使用下面的规则

    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吗