Php 为什么重写规则只有在文件夹存在时才起作用?
目标是输入url,如Php 为什么重写规则只有在文件夹存在时才起作用?,php,apache,.htaccess,mod-rewrite,ovh,Php,Apache,.htaccess,Mod Rewrite,Ovh,目标是输入url,如 https://www.mywebsite/expert/188/name-of-the-expert 并以表单的形式将其返回到服务器 expert.php?exp=188 就像用户输入https://www.mywebsite/expert.php?exp=188 什么不起作用: 简单的规则,如RewriteRule^expert-([0-9]*)$expert.php?exp=$1[L,NC,QSA] 什么工作 我有以下重写规则,只有当我在我的树中创建文件夹expe
https://www.mywebsite/expert/188/name-of-the-expert
并以表单的形式将其返回到服务器
expert.php?exp=188
就像用户输入https://www.mywebsite/expert.php?exp=188
什么不起作用:
简单的规则,如RewriteRule^expert-([0-9]*)$expert.php?exp=$1[L,NC,QSA]
什么工作
我有以下重写规则,只有当我在我的树中创建文件夹expert/时才有效,即/www/expert/
# FRIENDLY URL FOR EXPERTS PROFILE
Rewriterule ^(.*)expert\/([0-9]*)(\/[a-z0-9\-\']*)?\/?$ expert.php?exp=$2 [L,NC,QSA]
此外,为了使这条规则起作用,我必须将
放在expert.php页面中,以避免所有链接资源出现错误:
加载资源失败:服务器响应状态为404()
服务器是APACHE,位于名为OVH的共享web托管平台上
问题的完整代码:
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymlinks
RewriteBase /
# FRIENDLY URL FOR EXPERTS PROFILE
Rewriterule ^(.*)expert\/([0-9]*)(\/[a-z0-9\-\']*)?\/?$ expert.php?exp=$2 [L,NC,QSA]
</IfModule>
重新启动发动机
选项+FollowSymlinks
重写基/
#专家档案的友好URL
重写规则^(.*)expert\/([0-9]*)(\/[a-z0-9\-\']*)?\/?$expert.php?exp=$2[L,NC,QSA]
阅读后,我从使用重写规则改为使用Apaches FallbackResource。这更像是“如果找不到页面,则运行此页面”
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
FallbackResource /root.php
</Directory>
选项索引跟随符号链接
不允许超限
要求所有授权
FallbackResource/root.php
我发现的唯一一件事是,如果URL是针对确实存在的页面的,那么在我的例子中,它将提供该URL,而不是您的基本新基本页面“root.php”。在关闭多视图的情况下,将其设置为这样:
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
# FRIENDLY URL FOR EXPERTS PROFILE
Rewriterule ^/?expert/(\d+)/?$ expert.php?exp=$1 [L,NC,QSA]
选项
MultiViews
(请参阅)由Apache的内容协商模块使用,该模块在mod_rewrite
之前运行,并使Apache服务器匹配文件扩展名。因此,如果/file
是URL,那么Apache将提供/file.html
有趣的服务,但我不需要回退,我需要转到所需的页面expert.php?exp=188我使用的方式是expert.php页面成为您的回退。我已经写了一个nano REST框架,它使用了这个想法,对我来说,主要的入口点是root.php页面。我会尝试,但如果我将来创建专家文件夹,我可能会遇到麻烦,我希望有另一个退路。你能根据我的问题应用你的答案吗?因为我不知道如何实现它。它工作得很好,但我需要保留第一个back引用(*),它才能工作。以及html基本标记
。知道为什么吗?base
tag是必需的,因为您是css/js/images的相对路径