1

目标是输入一个像

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 仅当我在树中物理创建文件夹专家/时才有效,即 /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>
4

2 回答 2

1

在阅读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”。

于 2017-06-10T11:11:53.863 回答
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 module运行的程序使用,并使 Apache 服务器匹配文件的扩展名。因此,如果是 URL,那么 Apache 将提供. mod_rewrite/file/file.html

于 2017-06-10T11:16:40.950 回答