apache htaccess中的重写规则不起作用

rqqzpn5f  于 2023-03-03  发布在  Apache
关注(0)|答案(4)|浏览(163)

我目前在本地计算机上运行Apache 2,安装了最新版本的Ubuntu。
我正在尝试通过使用.htaccess文件进行基本的URL重写。
文件“http://localhost/page.php?=home“确实存在,而位置“/doesnotexist/home”不存在。
我想有第一页被加载时,第二个是请求。
我的.htaccess文件看起来像这样:

RewriteEngine On
RewriteRule ^/doesnotexist/(.*)$ /page.php?p=$1

我的httpd.conf文件看起来像这样:

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

<Directory /var/www>
    AllowOverride All
</Directory>

请注意,我的httpd.conf文件看起来 * 完全 * 像这样,因为在我编辑它之前它是空的。
我得到的结果是:

Not Found

The requested URL /doesnotexist/home was not found on this server.

我已经在谷歌上搜索了这个问题的答案,除了上面的错误,我从来没有得到过任何东西。
如果有人有任何想法,我将非常感激。

ngynwnxp

ngynwnxp1#

为了别人的利益,我想出了答案:
在文件“/etc/apache 2/sites-enabled/000-default”中有这样一行:

AllowOverride None

将此更改为:

AllowOverride All
eagi6jfj

eagi6jfj2#

在.htaccess文件中使用mod_rewrite时,需要从模式中删除上下文路径前缀,在根目录的情况下,路径前缀就是/,所以尝试以下操作:

RewriteRule ^doesnotexist/(.*)$ /page.php?p=$1
6yjfywim

6yjfywim3#

如果我在/Library/WebServer/Documents中放置一个.htaccess并打开“localhost/";为了测试它,这个功能和预期的一样。只是在“~/站点”中不起作用。我已经在MacOSX Mavericks上试过了。

mtb9vblg

mtb9vblg4#

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} `!-f`
RewriteCond %{REQUEST_FILENAME} `!-d`
RewriteRule . /index.php [L]
</IfModule>

相关问题