我目前有以下DatabaseQuery
:
.htaccess
Web服务器的文档根目前是上面引用的<IfModule mod_rewrite.c>
Options Indexes FollowSymLinks
RewriteEngine On
RewriteBase /production/
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
文件夹(/production
文件位于父文件夹中,因为.htaccess
被删除并重建代码提交)。以上内容会将我网站的所有流量都指向/production
。
我想对此例外。如果请求是index.html
,我希望在父文件夹中运行名为www.mydomain.com/specialrequest
的PHP脚本。
要查看,这是我的script.php
目录:
/var/www/html
Apache指向-html
-production
-anotherfolder
-.htaccess
-script.php
,我希望所有请求都转到该目录中的/var/www/html/production
文件,除非请求是index.html
- 在这种情况下,我希望{{ 1}}跑。
答案 0 :(得分:0)
Apache指向
/var/www/html/production
因此,/var/www/html/production
确实被定义为DocumentRoot
。因此,您的.htaccess
文件位于上方文档根目录。并且您要重写的文件(在收到此特殊请求时)也位于文档根目录之上。
不幸的是,您无法使用.htaccess
重写文档根目录上的文件(无论.htaccess
文件位于何处)。这是因为每个目录RewriteRule
文件中的.htaccess
替换采用网址路径,因此尝试重写为文档上方的网址root根本就是无效的。但是,如果您有权访问服务器配置(或虚拟主机),则可以使用此方法重写为文件系统路径(包括文档根目录上方) - 而不是URL路径。
因此,script.php
需要位于文档根目录中才能使用.htaccess
执行此操作。在这种情况下,您可以执行以下操作:
RewriteEngine On
# Exception
RewriteRule ^specialrequest$ /script.php [L]
# Front controller
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
但在这种情况下,script.php
需要位于/html/production/script.php
(位于文档根目录中),而不是/html/script.php
(位于文档根目录下方) - 就像您当前的那样文件系统结构。
顺便提一下,RewriteBase /production/
文件中的.htaccess
指令完全是多余的。您还没有使用相对路径替换,但由于/production
是文档根,因此/index.html
(文档根相对URL路径)将重写为{{1无论如何。
但是,如果您可以直接在服务器配置(或虚拟主机)中编写此代码,那么您可以执行所需的操作。例如:
/production/index.html