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

时间:2017-06-10 11:07:40

标签: php apache .htaccess mod-rewrite ovh

目标是输入类似

的网址
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]

工作 我有以下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="/">放在页面expert.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>

2 个答案:

答案 0 :(得分:1)

在阅读https://www.adayinthelifeof.nl/2012/01/21/apaches-fallbackresource-your-new-htaccess-command/之后,我从使用重写规则变为使用Apaches FallbackResource。如果找不到页面,那就更多了,然后再运行此页面&#39;

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

我唯一发现的是,如果网址是针对确实存在的网页的,那么它就会代替您的基本新基页&#39; root.php&#39;就我而言。

答案 1 :(得分:1)

在关闭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)由Apache's content negotiation modulemod_rewrite之前运行使用,并使Apache服务器匹配文件扩展名。因此,如果/file是网址,那么Apache将提供/file.html