.htaccess规则与表达式类似于filename需要404页面

时间:2014-11-21 14:14:02

标签: php apache .htaccess mod-rewrite

问题是这个简单的规则有效:

RewriteRule ^about$ aboutus.php [L,NC]

表示我可以使用此网址访问我的网站: http://www.example.com/about

但如果我改成它:

RewriteRule ^aboutus$ aboutus.php [L,NC]

然后此链接不起作用: http://www.example.com/aboutus

表示如果规则表达式与文件名相同,则表示它不起作用。

此规则适用于其他服务器,但在某个特定服务器上它不起作用。

服务器是: Linux piper 3.2.0-4-amd64#1 SMP Debian 3.2.57-3 + deb7u2 x86_64

PHP版本是: 5.4.34-0 + deb7u1

可能是什么原因?


以下是文件开头的代码

# compress text, HTML, JavaScript, CSS, and XML
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

# remove browser bugs
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresDefault "access plus 2 days"
</IfModule>
## EXPIRES CACHING ##


ServerSignature Off
ErrorDocument 403 /403.php
ErrorDocument 404 /404.php

RewriteEngine on
RewriteBase /

之后有一些简单的规则

RewriteRule ^abcd/([0-9]*)-[a-zA-Z0-9&\-\+\.\_'"]* abcdef.php?id=$1 [L,NC]

...... some similar rules .......

RewriteRule ^contact$ contactus.php [L,NC]
RewriteRule ^about$ aboutus.php [L,NC]

现在如果我将最后一条规则从^改为$ about about $,那么它就会停止工作。

1 个答案:

答案 0 :(得分:1)

此类问题的一个常见原因是mod_negotiation(选项+多视图)已启用并且正在执行类似的&#34;映射。当你要求没有扩展名的东西时它就会开始。您可以使用Options -MultiViews禁用它,并且会停止干扰您的显式重写。