Правило .htaccess с выражением, похожим на имя файла, занимает страницу 404

0

Проблема в том, что это простое правило работает:

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

означает, что я могу получить доступ к своему сайту, используя этот URL: 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]

Теперь, если я изменю последнее правило от ^ около $ до ^ aboutus $, он перестанет работать.

  • 1
    У вас есть больше утверждений в вашем .htaccess?
  • 1
    Можете ли вы показать свой полный .htaccess?
Показать ещё 1 комментарий
Теги:
.htaccess
mod-rewrite

1 ответ

1
Лучший ответ

Общей причиной такого рода проблем является то, что mod_negotiation (Options +MultiViews) включен и выполняет "аналогичное" сопоставление. Он срабатывает, когда вы просите что-то без расширения. Вероятно, вы можете отключить его с помощью параметров -MultiViews и прекратите вмешиваться в ваши явные перезаписи.

  • 0
    спасибо, это была реальная помощь :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню