Недавно я столкнулся с проблемой, когда некоторые страницы 404 при доступе через их неуклюжие пути.
Те же страницы работают, когда строка запроса, например ?1234
или index.php
добавляется к пути.
Пример:
http://pagesofinterest.net/code/plugins/code-complete/ - Потерпеть поражение
http://pagesofinterest.net/code/plugins/code-complete/?123 - Успех
http://pagesofinterest.net/code/plugins/code-complete/index.php - Успех
Я не уверен, проблема ли это в mod_rewrite или в кешировании.
Вот содержимое моего файла .htaccess:
# Use PHP5.3 Single php.ini as default
AddHandler application/x-httpd-php53 .php
#ExpiresDefault A0
Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
Header set Pragma "no-cache"
DirectoryIndex index.php index.html
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.pagesofinterest.net [NC]
RewriteRule ^(.*)$ http://pagesofinterest.net/$1 [R=301,NC]
# Error documents
ErrorDocument 404 /404.php
ErrorDocument 403 /404.php
ErrorDocument 500 /500.php
# compress a few file extensions
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/html
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch ^MSIE !no-gzip !gzip-only-text/html
<IfModule mod_expires.c>
# explicitly disable caching for scripts and other dynamic files
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>
Redirect /mikes http://pagesofinterest.net/blog/
Redirect /code-of-interest http://pagesofinterest.net/code
# Redirect all old photo pages to the tiny new one
RewriteCond %{REQUEST_URI} ^/photos/[a-z\/]+$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ http://pagesofinterest.net/photos/ [R=301,L]
Это выглядит странно, нам потребуются ошибки, сгенерированные из журнала модуля перезаписи (см. https://httpd.apache.org/docs/current/mod/mod_rewrite.html для получения дополнительной информации о том, как включить директиву rewritelog). Проблема выглядит как ограниченная вашей страницей с полным кодом, поскольку все доступные ссылки из меню действительно дают действительный URL / страницы.
Способ «быстрого исправления / взлома» - добавить перенаправления для этой страницы. Я НЕ поддерживаю этот способ, но иногда мы просто хотим, чтобы он работал ...
Redirect /code/plugins/code-complete /code/plugins/code-complete/index.php
Redirect /code/plugins/code-complete/ /code/plugins/code-complete/index.php
Кроме того, в качестве примечания, вы теряете «/» в исходном запросе. Я бы изменил
RewriteRule ^(.*)$ http://pagesofinterest.net/$1 [R=301,NC]
для
RewriteRule ^(.*)$ http://pagesofinterest.net$1 [R=301,NC]