为什么rewrite_rule仅在文件夹存在时才有效



目标是输入一个网址,例如

https://www.mywebsite/expert/188/name-of-the-expert

并以以下形式将其返回到服务器

expert.php?exp=188

就像用户输入https://www.mywebsite/expert.php?exp=188

什么不起作用:简单的规则,如重写规则^expert-([0-9]*)$ expert.php?exp=$1 [L,NC,QSA]

什么工作我有以下rewrite_rule仅在我在我的树中物理创建文件夹 expert/时才有效,即/www/expert/

# FRIENDLY URL FOR EXPERTS PROFILE
Rewriterule ^(.*)expert/([0-9]*)(/[a-z0-9-']*)?/?$ expert.php?exp=$2 [L,NC,QSA]

此外,为了使此规则起作用,我必须将<base href="/">放在页面专家中.php以避免所有链接资源出错:

无法加载资源:服务器以状态 404 (( 响应

服务器是名为OVH的共享Web托管平台上的APACHE。

问题的完整代码:

<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>
关闭

MultiViews时这样:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
# FRIENDLY URL FOR EXPERTS PROFILE
Rewriterule ^/?expert/(d+)/?$ expert.php?exp=$1 [L,NC,QSA]

选项 MultiViews(请参阅 http://httpd.apache.org/docs/2.4/content-negotiation.html(由在mod_rewrite之前运行并使 Apache 服务器匹配文件扩展名的Apache's content negotiation module使用。因此,如果/file是URL,那么Apache将提供/file.html

我在阅读 https://www.adayinthelifeof.nl/2012/01/21/apaches-fallbackresource-your-new-htaccess-command/后从使用重写规则更改为使用Apaches FallbackResource。 它更像是"如果找不到页面,则运行此页面">

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    FallbackResource /root.php
</Directory>

我唯一发现的是,如果 URL 是针对确实存在的页面 - 那么在我的情况下,它会提供它而不是您的基本新基本页面"root.php"。

相关内容

  • 没有找到相关文章

最新更新