目标是输入类似
的网址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>
答案 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 module
在 mod_rewrite
之前运行使用,并使Apache服务器匹配文件扩展名。因此,如果/file
是网址,那么Apache将提供/file.html
。