Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于重定向所有非目录和非文件请求的htaccess规则_Php_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Php 用于重定向所有非目录和非文件请求的htaccess规则

Php 用于重定向所有非目录和非文件请求的htaccess规则,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我有一个网站,我需要一个全面的非目录和非文件请求重新定向回HTTP_主机。我有一个重写规则,只为无扩展名的PHP文件服务,还有一个总是从裸域请求解析到www.HTTP_主机的规则。这是我的htaccess文件: #Main Page DirectoryIndex index.php AddDefaultCharset UTF-8 Options +FollowSymLinks RewriteEngine On RewriteBase / # Cache Control for Images a

我有一个网站,我需要一个全面的非目录和非文件请求重新定向回HTTP_主机。我有一个重写规则,只为无扩展名的PHP文件服务,还有一个总是从裸域请求解析到www.HTTP_主机的规则。这是我的htaccess文件:

#Main Page
DirectoryIndex index.php
AddDefaultCharset UTF-8
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

# Cache Control for Images and Assets
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>

# Never Use the naked domain
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301,NE]

# Never Use the naked domain and Remove PHP extension
RewriteCond %{THE_REQUEST} \.(php|cfm)[\s?] [NC]
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(.+?)\.(cfm|php)$ /$1 [R=301,L,NE]

# Re-direct Non-file Non-directories to HTTP_HOST
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+?)((\?.*)|())$ http://www.example.com [R=301,L]

# unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(.+?)/?$ $1.php [L] 

我的第四套规则似乎没有按我需要的方式工作,不知道为什么。感谢您的任何帮助。

代替使用MODY重写的非文件请求过滤,请考虑使用FraseReals:


这更容易维护,Apache也应该更容易处理。

这是重新定向的非文件。。。不起作用?它现在好像起作用了。不确定是否缓存了htaccess文件的旧版本,或者问题是什么。此解决方案非常适合解析已定义的现有文件,而不返回404。但是,请求的URL仍然附加到主机上,这对SEO不好。仍然需要重新编写。