[英]Apache rewriting without mod_rewrite?
在未启用或配置mod_rewrite的情况下,Apache如何重写URL?
我正在通过开发服务器重新设计网站。 我在站点部分使用目录结构,但是我正在考虑切换到URL重写并将相关文件放在站点的根目录中。
例如,about页面有一个名为about的子目录,其中包含一个index.php,当请求为http://www.example.com/about时将提供该索引。 我打算更改此设置,以便即使请求中不包含php扩展名,也可以提供站点根目录中的about.php。
在我的开发服务器上,问题是即使我在路径层次结构的任何地方都没有.htaccess
文件,URL也已被重写。
Apache配置是Ubuntu的常规配置,我怀疑这是Ubuntu独有的配置,但我找不到原因。
这是我所做的一些观察:
Include
来自其他一些目录的s配置文件。 LogWarning
指令设置为调试。 当我访问不带.php扩展名的页面时,错误日志显示带扩展名的URL,访问日志显示不带扩展名和HTTP 200状态的URL。 该页面已正确投放。 .htaccess
文件,则会收到.htaccess
文件.htaccess: Invalid command 'RewriteEngine'
错误。 ...默认情况下甚至没有加载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
选项。 我只有一个类型映射(/etc/apache2/mods-enabled/mime.conf)用于'var',而MultiViews
选项仅设置用于/ usr / share / apache2 / icons。 所以,这不可能。
重定向和重定向匹配
Redirect&RedirectMatch将为这种行为提供一个很好的解释,但是它需要每个重定向的指令。 我没有任何这些设置,并且我键入的任何路径都会提供相关的php文件(如果存在)。 另外,如果这是原因,我认为access.log将生成3xx状态,而不是200(如果是重定向)。
别名和别名匹配
像Redirect和RedirectMatch一样, Alias&AliasMatch需要为每个资源设置指令。 我只为/ icons /设置了别名。
后备资源
FallbackResource标识当请求的资源不存在时要服务的单个资源。 就我而言,当所请求的资源不存在时,它将通过在请求的末尾附加“ .php”来提供所找到的资源。 我也仔细检查过,没有设置FallbackResource指令。
这是我用来确认没有在任何地方设置特定选项的命令的示例:
find /etc/apache2 -name "*.conf" -exec grep -li "FallbackResource" {} \;
我在搜索MultiViews选项时遇到了一个漏洞。 我只在寻找扩展名为.conf或.load的文件,但某些配置文件根本没有扩展名。 “ MultiViews”选项由默认站点配置文件/ etc / apache2 / sites-enabled / 000-default设置。
感谢@zneak首先提供了答案,尽管他在评论中做到了。 感谢@regilero,他通过使用与我习惯的语法不同的grep
语法间接地向我展示了我所缺少的内容。
您所说的重写可以通过许多其他指令来完成:
默认情况下,这些配置项通常不在.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。 )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.