早上好, 我在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文件有效,但是如果我将其加载到服务器号上
谢谢
答案 0 :(得分:0)
在您的示例中,似乎mod_rewrite
只是用app
代替了app.html
,因此从/user/app.html/dashboard
中产生了/user/app/dashboard
。
如果您的.htaccess
文件可以在您测试过的网站上正常工作,是否可能有其他因素干扰请求?
也许重写日志可以引导您找到答案?有关更多信息,请参见this Stackoverflow answer。
希望这会有所帮助。