【问题标题】:PHP and Redirect with apache2.confPHP 和使用 apache2.conf 重定向
【发布时间】:2020-02-20 23:07:01
【问题描述】:

我有一个类似的内部域

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"]=&gt;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 还是什么?

提前致谢

亚历克斯

【问题讨论】:

  • RewriteRule 匹配请求的 URL 的路径部分。您请求的 URL 的路径中不包含 mydomainnamenodots
  • 好的 - 我把它改成了 RewriteRule ^.*?api(.*)$ /api/index.php?url=$1 [QSA,L] 得到 Not Found The requested URL /api/statistics/getFTE/9936514/131331 was not found on this server. 有什么想法吗?
  • 为什么要以.*?开头,如果要匹配的内容以/api/开头? // 尝试将其从您当前所在的 Directory 容器中取出,不确定是否匹配。
  • 取消注释 部分会导致相同的错误。但可能是我没有正确理解你的观点。你介意改变我的重写以反映你的建议吗?!

标签: php apache url-rewriting


【解决方案1】:

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

这对我有用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-22
    • 2021-12-27
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多