首页 > 解决方案 > PHP 和使用 apache2.conf 重定向

问题描述

我有一个内部域

live.domain.com

我在 sites-available 中定义的像这样

ServerName live.domain.com

    ServerAdmin webmaster@localhost
    DocumentRoot /data/www/html/mydomainnamenodots 

        <Directory /data/www/html/mydomainnamenodots>
           Require all granted
        </Directory>

SSL conf 也是如此。

我确实有一个文件夹/api在那里像 /data/www/html/mydomainnamenodots/api

我想要的是抓住所有的电话 live.domain.com/api/*

并将它们重定向到类似的东西 live.domain.com/api/index.php?url=*

所以一个真实的例子是

live.domain.com/api/statistics/getFTE/123/456

我希望这样

live.domain.com/api/index.php?url=/statistics/getFTE/123/456

这将导致 index.php 中的 $_REQUEST 像这样

array(1) {["url"]=>string(33) "/statistics/getFTE/123/456"}

mod_rewrite 已启用并加载。使用文件到文件重定向的简单测试有效。

我的重写规则不起作用,因为它不重定向是

<Directory "/data/www/html/mydomainnamenodots/api">
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*?mydomainnamenodots\/api(.*)$ /mydomainnamenodots/api/index.php?url=$1 [QSA,L]
</Directory>

任何想法为什么这不起作用?我错过了 RewriteBase 还是什么?

提前致谢

亚历克斯

标签: phpapacheurl-rewriting

解决方案


由于子域已经指向一个子文件夹,因此它必须是目录定义中该子文件夹下的相应子文件夹。此外,我也更改了正则表达式。

这对我有用:

<Directory />
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^.*\/api(\/.*)$ /api/index.php?url=\/$1 [QSA,L]
</Directory>

推荐阅读