当我启用MultiViews时,如果我访问了错误的URL,我的页面(index.php)仍然会被访问,当我希望用户得到404错误时。我试图找出如何解决这个问题而不在我的.htaccess
中创建规则。
例如," www.mydomain.com/ 索引 / blah / blah",访问 index.php ,但我希望它失败由于无关的垃圾URL组件。类似地," / 联系 / blah / awuihda / hiu",显示 contact.php 的内容,应该给出404错误,因为&# 34; /嗒嗒/ awuihda / HIU"不存在。
如果我禁用MultiViews它可以正常工作,但是我无法按照我的意愿缩写URL(例如,无法输入" / contact"提起" contact.php&#34)。
答案 0 :(得分:0)
您可以使用以下内容,因此不需要.php
扩展名,这是常用方法:
RewriteEngine on
# Remove .php if it's present with a 301 redirect
RewriteRule ^(.+)\.php$ $1 [R=301,L]
# If a request doesn't exist as a directory, file or symlink
# and it does exist with .php appended, rewrite to that
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L]
我知道它会向.htaccess
添加一条规则,但它适用于所有内容,也意味着您不会遇到可能存在相同内容的重复内容在有或没有.php
的情况下提供服务(或者实际上在您的示例中跟踪之后的所有内容)。希望它有用。
它可能会进入主服务器配置但需要更改。
答案 1 :(得分:0)
我找到了一个适合我的解决方案。
Options -Indexes SymLinksIfOwnerMatch -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
来源:link