gpt4 book ai didi

apache - mod_rewrite 不在 XAMPP 上执行特定重定向 - 与 DirectoryIndex 冲突?

转载 作者:行者123 更新时间:2023-12-02 03:51:08 26 4
gpt4 key购买 nike

我们正在尝试设置本地开发 XAMPP 计算机(Apache2,在 Windows 8 上)。

除了一种特定类型的指令外,所有 mod_rewrite 指令都可以正常工作:我们尝试将对某些目录的请求重定向到特定文件。

RewriteEngine On
RewriteRule ^/?$ add_survey.php [QSA,L]
而是提供

index.php。我们还尝试了 ^.?$^$/* 但这些都不起作用。

这虽然有效(但包容性太强)

RewriteRule ^.*$ add_survey.php [QSA,L]

我检查了通常的嫌疑人(对我来说),即Options -MultiviewsOptions -Indexes,我的同事现在正在玩mod_dir ,尽管我真的不明白为什么它会成为罪魁祸首。

澄清我们的用例:
/survey/ 的请求应发送至 add_survey.php,而所有其他请求均发送至例如/survey/SURVEYNAME/upload 在此上下文中,index.php 文件作为 /survey/SURVEYNAME/ 提供。

基本上所有文件都是根据特定的可用调查构建的,唯一可以在没有特定可用调查的情况下调用的文件是允许您创建新调查的文件。

/survey/               #-> add new survey, e.g. NAME (/survey/add_survey.php)
/survey/NAME/ #-> manage existing survey NAME (/survey/index.php?survey_name=NAME)
/survey/NAME/results #-> view results in NAME (/survey/results.php?survey_name=NAME)

最佳答案

tl;dr:添加
DirectoryIndex已禁用

为了您的方便,我提出了拉取请求;) https://github.com/rubenarslan/formr.org/pull/82

有点晚了,但我今天不是在 XAMPP 上而是在 Ubuntu 14.04.1 上的 Apache 2.4.7 上偶然发现了这个问题......

查看 Apache/rewrite 的调试输出后,看起来 Apache 正在尝试索引文件而不是使用正确的重写。因此,我的解决方案(或更可能的解决方法:)是禁用调查的 DirectoryIndex 并运行目录:

/webroot/admin/run/.htaccess:

<IfModule mod_rewrite.c>
DirectoryIndex disabled
RewriteEngine On
RewriteRule ^/?$ add_run.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([A-Za-z0-9_]+)/?$ index.php?run_name=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php !-d
RewriteCond %{REQUEST_FILENAME}.php !-f
RewriteRule ^([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/?$ $2.php?run_name=$1 [QSA,L]
# on HU subdomain
# RewriteBase /survey/admin/run/
</IfModule>

/webroot/admin/survey/.htaccess:

<IfModule mod_rewrite.c>
DirectoryIndex disabled
RewriteEngine On
RewriteRule ^/?$ add_survey.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([A-Za-z0-9_]+)/?$ index.php?study_name=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php !-d
RewriteCond %{REQUEST_FILENAME}.php !-f
RewriteRule ^([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/?$ $2.php?study_name=$1 [QSA,L]
# on HU subdomain
# RewriteBase /survey/admin/survey/
</IfModule>

对于那些喜欢这种奇怪的东西的人来说,也许可以帮助获得更深入的理解 - 调试日志:

strip per-dir prefix: /var/www/formr/webroot/admin/survey/ -> 
applying pattern '^/?$' to uri ''
rewrite '' -> 'add_survey.php'
add per-dir prefix: add_survey.php -> /var/www/formr/webroot/admin/survey/add_survey.php

看起来不错...但是等等...

strip document_root prefix: /var/www/formr/webroot/admin/survey/add_survey.php -> /admin/survey/add_survey.php
internal redirect with /admin/survey/add_survey.php [INTERNAL REDIRECT]

现在让我们尝试使用index.html

strip per-dir prefix: /var/www/formr/webroot/admin/survey/index.html -> index.html
applying pattern '^/?$' to uri 'index.html'
strip per-dir prefix: /var/www/formr/webroot/admin/survey/index.html -> index.html
applying pattern '^/?([A-Za-z0-9_]+)/?$' to uri 'index.html'
strip per-dir prefix: /var/www/formr/webroot/admin/survey/index.html -> index.html
applying pattern '^([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/?$' to uri 'index.html'
pass through /var/www/formr/webroot/admin/survey/index.html

和.cgi ...有一段时间没看到这个了...

strip per-dir prefix: /var/www/formr/webroot/admin/survey/index.cgi -> index.cgi
applying pattern '^/?$' to uri 'index.cgi'
strip per-dir prefix: /var/www/formr/webroot/admin/survey/index.cgi -> index.cgi
applying pattern '^/?([A-Za-z0-9_]+)/?$' to uri 'index.cgi'
strip per-dir prefix: /var/www/formr/webroot/admin/survey/index.cgi -> index.cgi
applying pattern '^([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/?$' to uri 'index.cgi'
pass through /var/www/formr/webroot/admin/survey/index.cgi

和.pl ...

strip per-dir prefix: /var/www/formr/webroot/admin/survey/index.pl -> index.pl
applying pattern '^/?$' to uri 'index.pl'
strip per-dir prefix: /var/www/formr/webroot/admin/survey/index.pl -> index.pl
applying pattern '^/?([A-Za-z0-9_]+)/?$' to uri 'index.pl'
strip per-dir prefix: /var/www/formr/webroot/admin/survey/index.pl -> index.pl
applying pattern '^([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/?$' to uri 'index.pl'
pass through /var/www/formr/webroot/admin/survey/index.pl

最后但并非最不重要的.php ...哦...看...index.php...

strip per-dir prefix: /var/www/formr/webroot/admin/survey/index.php -> index.php
applying pattern '^/?$' to uri 'index.php'
strip per-dir prefix: /var/www/formr/webroot/admin/survey/index.php -> index.php
applying pattern '^/?([A-Za-z0-9_]+)/?$' to uri 'index.php'
strip per-dir prefix: /var/www/formr/webroot/admin/survey/index.php -> index.php
applying pattern '^([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/?$' to uri 'index.php'
pass through /var/www/formr/webroot/admin/survey/index.php

关于apache - mod_rewrite 不在 XAMPP 上执行特定重定向 - 与 DirectoryIndex 冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22152822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com