【发布时间】: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"]=>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