.htaccess重写规则不适用于Apache2
我知道有一百万篇关于这方面的帖子,但我已经阅读了很多,为了让它发挥作用,我做了很多修改,但我不知所措。我在apache2服务器web服务器中设置了重定向规则,但它不重定向 我的web服务器根文件夹结构:.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
/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]