gpt4 book ai didi

apache - 没有mod_rewrite的Apache重写?

转载 作者:行者123 更新时间:2023-12-01 04:06:42 24 4
gpt4 key购买 nike

在未启用或配置mod_rewrite的情况下,Apache如何重写URL?

我正在通过开发服务器进行网站重新设计。我在站点部分使用目录结构,但是我正在考虑切换到URL重写并将相关文件放在站点的根目录中。

例如,关于页面有一个名为的子目录,其中包含一个index.php,当请求为http://www.example.com/about时将提供该索引。我打算更改此设置,以便即使请求中不包含php扩展名,也可以提供站点根目录中的about.php。

在我的开发服务器上,问题在于,即使我在路径层次结构的任何地方都没有.htaccess文件,URL也已经被重写。

Apache配置是Ubuntu的常规配置,我怀疑这是Ubuntu独有的配置,但我找不到原因。

这是我所做的一些观察:


/etc/apache2/httpd.conf为空,但配置位于/etc/apache2/apache2.conf中,这反过来又从其他目录中提供Include的配置文件。
在此网站的层次结构中的任何地方都没有.htaccess文件。我已经检查了从/ var / www开始的每个目录
除了/ etc / apache2 / mods-available中的rewrite.load文件之外,/ etc / apache2下的.conf或.load文件没有任何要重写的引用。
我将LogWarning指令设置为调试。当我访问不带.php扩展名的页面时,错误日志显示带扩展名的URL,访问日志显示不带扩展名和HTTP 200状态的URL。该页面已正确投放。
如果确实添加具有适当配置的.htaccess文件,则会出现.htaccess: Invalid command 'RewriteEngine'错误。 ...默认情况下甚至没有加载mod_rewrite。
如果我通过链接到/ etc / apache2 / mods-enabled中的加载文件来启用mod_rewrite,则它会按预期工作,也就是说,与我未启用它完全相同。


access.log显示:

127.0.0.1 - - [16/Jan/2012:05:36:35 +0800] "GET /dev/ghodmode.com/h5bp/ HTTP/1.1" 200 3602 "http://alienware/dev/ghodmode.com/h5bp/experiments" "Mozilla/5.0 (Ubuntu; X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0"


而error.log显示:

[Mon Jan 16 05:23:23 2012] [debug] mod_deflate.c(615): [client 127.0.0.1] Zlib: Compressed 5347 to 1876 : URL /dev/ghodmode.com/h5bp/experiments.php, referer: http://alienware/dev/ghodmode.com/h5bp/


如果添加 .htaccess文件:

[Mon Jan 16 05:34:33 2012] [alert] [client 127.0.0.1] /var/www/dev/ghodmode.com/h5bp/.htaccess: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration, referer: http://alienware/dev/ghodmode.com/h5bp/experiments


更新资料

感谢提供的答案,我一直在阅读,并且学到了一些东西。要点是,我正在使用Apache2的Ubuntu本地安装,并且没有更改默认配置。因此,没有设置任何建议的原因。

当然,我可能会误解了一些文档。这是我第一次阅读其中一些选项。

多视图
Multiviews提供了这种情况的最佳解释,但是需要为路径设置类型映射或 MultiViews选项。我只有一个类型映射(/etc/apache2/mods-enabled/mime.conf)用于'var',并且 MultiViews选项仅设置为/ usr / share / apache2 / icons。所以,这不可能。

重定向和重定向匹配
Redirect & RedirectMatch可以为这种行为提供一个很好的解释,但是它需要每个重定向的指令。我没有任何这些设置,并且我键入的任何路径都可以提供相关的php文件(如果存在)。另外,如果这是原因,我认为access.log将生成3xx状态,而不是200(如果是重定向)。

别名和AliasMatch
Alias & AliasMatch,与Redirect和RedirectMatch一样,要求为每个资源设置指令。我只为/ icons /设置了别名。

后备资源
FallbackResource标识当请求的资源不存在时要服务的单个资源。就我而言,当所请求的资源不存在时,它将通过在请求的末尾附加'.php'来找到资源。我也仔细检查过,没有设置FallbackResource指令。

这是我用来确认没有在任何地方设置特定选项的命令的示例:

find /etc/apache2 -name "*.conf" -exec grep -li "FallbackResource" {} \;


更新#2:

我在搜索MultiViews选项时遇到了一个漏洞。我只在寻找扩展名为.conf或.load的文件,但是某些配置文件根本没有扩展名。 “ MultiViews”选项由默认站点配置文件/ etc / apache2 / sites-enabled / 000-default设置。

感谢@zneak首先提供了答案,尽管他在评论中做到了。感谢@regilero,他通过向 grep使用与我惯用的语法不同的语法间接地向我展示了我所缺少的东西。

最佳答案

您所说的重写可以通过许多其他指令来完成:


Redirect & RedirectMatch:用于外部重定向(带有301,302甚至403或404代码
Alias & AliasMatch:用于内部重定向(例如,内部目录重新映射)
FallBackresource:将每个丢失的文件重定向到index.php boostrap
Option Multiviews:来自mod-autoindex,在许多安装中默认启用


默认情况下,这些配置项通常不在.htaccess文件中,因为.htaccess文件只是减慢apache速度并允许用户添加除VirtualHosts中定义的规则之外的其他规则而已。最有用的配置内容是在/etc/apache2/sites-enabled/etc/apaches2/mod-enableds//etc/apache2/conf.d/中。

现在最奇怪的是Option Multiviews生成grep -R MultiViews /etc/apache2/*。如果DocumentRoot中存在这些目录并且这些文件存在(尝试所有可用扩展名),此选项会将对http://www.example.com/foo/bar的任何调用映射到foo / bar.php或foo / bar.html。

关于apache - 没有mod_rewrite的Apache重写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8873902/

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