根据正则表达式,为什么RewriteRule不能按我的预期工作?

时间:2019-04-17 12:15:07

标签: apache .htaccess mod-rewrite

早上好, 我在Apache2服务器上配置了虚拟主机。 mod_rewrite模块处于活动状态且功能正常。

我在网站 https://regex101.com/ 上测试了正则表达式,其行为与我期望的一样。

我在 https://htaccess.madewithlove.be/ 网站上测试了 .htaccess 文件,该文件可以正常运行。

我不明白为什么,当我在apache服务器上尝试它不起作用时。

这是完整的 .htaccess 文件

.htaccess

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(assets|locale)/(.*)$  user/$2/$3 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(/{0,1})user/([^/]+)(/?.*) user/$2.html [QSA,L]

虚拟主机配置

Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted

网站结构

mywebsite.local
    user/
        - .htaccess
        - index.html
        - app.html

经过测试的网址

http://mywebsite.local/user/index/
http://mywebsite.local/user/app/
http://mywebsite.local/user/app/dashboard/
http://mywebsite.local/user/app/planningWeek/current/
http://mywebsite.local/user/app/task/taskId/day/month/year/

我的期望

http://mywebsite.local/user/index/
go to index.html (it works)

http://mywebsite.local/user/app/
go to app.html (it works)

http://mywebsite.local/user/app/dashboard/
it must go to app.html but I have this error
"The requested URL /user/app.html/dashboard was not found on this server."

我不明白为什么正则表达式有效并且指示站点中的.htaccess文件有效,但是如果我将其加载到服务器号上

谢谢

1 个答案:

答案 0 :(得分:0)

在您的示例中,似乎mod_rewrite只是用app代替了app.html,因此从/user/app.html/dashboard中产生了/user/app/dashboard

如果您的.htaccess文件可以在您测试过的网站上正常工作,是否可能有其他因素干扰请求?

也许重写日志可以引导您找到答案?有关更多信息,请参见this Stackoverflow answer

希望这会有所帮助。