Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess重写规则不适用于Apache2_Apache_.htaccess - Fatal编程技术网

.htaccess重写规则不适用于Apache2

.htaccess重写规则不适用于Apache2,apache,.htaccess,Apache,.htaccess,我知道有一百万篇关于这方面的帖子,但我已经阅读了很多,为了让它发挥作用,我做了很多修改,但我不知所措。我在apache2服务器web服务器中设置了重定向规则,但它不重定向 我的web服务器根文件夹结构: /var/www/example/ | |----l | |---index.php |---.htaccess /var/www/example/l/.htaccess内容为: $ cat /var/www/example/l/.htaccess Rewri

我知道有一百万篇关于这方面的帖子,但我已经阅读了很多,为了让它发挥作用,我做了很多修改,但我不知所措。我在apache2服务器web服务器中设置了重定向规则,但它不重定向

我的web服务器根文件夹结构:

/var/www/example/
|
|----l
     |
     |---index.php
     |---.htaccess
/var/www/example/l/.htaccess内容为:

$ cat /var/www/example/l/.htaccess 

RewriteEngine On 
RewriteRule ^l/([a-zA-Z0-9]{6})$ l/index.php?redirect=$1 [R=302,L]
我还尝试将其放入根文件夹
/var/www/example/.htaccess

我的重写规则似乎在此网站上正常工作:

安装mod_rewrite.so并加载rewrite_模块

我运行了
sudoa2enmod rewrite
,它被打开了

APache2.conf:

$ cat /etc/apache2/apache2.conf
<Directory "/var/www/example">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
$cat/etc/apache2/apache2.conf
选项索引跟随符号链接
允许超越所有
要求所有授权
当我去的时候,我只得到一个404错误


我只是想知道我是否遗漏了什么或是找了个地方。我检查了apache2
error.log
,其中没有与此相关的错误。

正如我的OP下面的评论中提到的@mrwhite和@anubhava,我混淆了使用.htaccess文件的方式

我删除了子目录标志(模式中的
l
),并添加了
QSA
,而不是重定向(
R=302
)。 这是因为我正在使用子目录中的.htaccess文件。 QSA是重定向/重写的正确“选项”(仍不确定差异)

原件:

RewriteRule ^l/([a-zA-Z0-9]{6})$ l/index.php?redirect=$1 [R=302,L]
新的(工作):


您发布的指令如果放在
/l/.htaccess
文件中肯定不起作用,但是,它应该在根
.htaccess
文件中“做点什么”(尽管它本身会导致格式错误的重定向)。你们还有什么其他指令?想必这应该是重写,而不是重定向?还有其他
.htaccess
文件吗?“做了这么多更改”-???在
i/.htaccess
中,您的规则应该是:
RewriteRule^([a-zA-Z0-9]{6})$index.php?重定向=$1[QSA,L]
AH!你们俩都很棒。谢谢你帮我做这件事。只是想补充一下。。。“我的重写规则似乎从此站点正常工作”-“该站点”假定您的
.htaccess
文件位于文档根目录中,而不是子目录中。
QSA
标志(查询字符串附加)仅附加原始查询字符串(如果有)这是对您在替换字符串中声明的查询字符串的初始请求。如果初始请求中不需要查询字符串,则应删除
QSA
标志。例如,使用
QSA
标志,如果您请求
example.com/l/i4Ikn2?foo=bar
,那么您的重写将导致
/l/index.php?redirect=i4Ikn2&foo=bar
。如果没有
QSA
,则不会附加
foo=bar
RewriteRule ^([a-zA-Z0-9]{6})$ index.php?redirect=$1 [QSA,L]