.htaccess mod_重写规则不起作用,但我有正确的语法

.htaccess mod_重写规则不起作用,但我有正确的语法,.htaccess,mod-rewrite,apache2,.htaccess,Mod Rewrite,Apache2,因此,我的mod_重写规则无法为URL指定特定的php文件 Options -Indexes php_value short_open_tag 1 #Caching # 1 HOUR <FilesMatch "\.(ico|pdf|flv)$"> Header set Cache-Control "max-age=31536000, public" </FilesMatch> # 1 HOUR <FilesMatch "\.(jpg|jpeg|png|gif|s

因此,我的mod_重写规则无法为URL指定特定的php文件

Options -Indexes
php_value short_open_tag 1

#Caching
# 1 HOUR
<FilesMatch "\.(ico|pdf|flv)$">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>

# 1 HOUR
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>

# 1 HOUR
<FilesMatch "\.(xml|txt|css|js)$">
Header set Cache-Control "max-age=31536000, proxy-revalidate"
</FilesMatch>


<IfModule mod_rewrite.c>
#Rewrite rules
RewriteEngine on

RewriteRule ^about\/special-offers\/?$ about/special-offers.php


# remove www. from all domains
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]

# Add trailing slash
# TODO: This breaks POST data when forwarding to a URL without an ending slash
#RewriteCond %{REQUEST_URI}  !\.(php|html?|gif|jpe?g|JPE?G|png|bmp|js|swf|css|ico|xml|txt|woff2|woff)$
#RewriteRule ^(.*)([^/])$ http://%{HTTP_HOST}/$1$2/ [P,R=301]

# hide .svn folders
RewriteRule ^(.*/)*\.svn/ / [NC,L]

# send all images and misc files to the actual location
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule \.(gif|jpe?g|JPE?G|png|bmp|js|swf|ico|xml|txt) index.php [NC,L]

# send folder to the relevant php file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ $1/$2.php
RewriteRule ^([^/]+)\/([^/]+)\/ $1/$2.php

#RewriteRule ^([^/]+)/([^/]+)/$ $1/$2.php
RewriteRule ^([^/]+)/([^/]+)/$ $1/default.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

# otherwise if the file or directory is not found, process through the index
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
</IfModule>
选项-索引
php_值short_open_标记1
#缓存
#1小时
标题集缓存控制“最大年龄=31536000,公共”
#1小时
标题集缓存控制“最大年龄=31536000,公共”
#1小时
标题集缓存控制“最大年龄=31536000,代理重新验证”
#重写规则
重新启动发动机
重写规则^about\/special offers\/?$about/special-offers.php
#从所有域中删除www
重写cond%{HTTP_HOST}^www\.(.+)$[NC]
重写规则^http://%1%{REQUEST_URI}[L,R=301]
#添加尾部斜杠
#TODO:转发到URL时,如果没有结束斜杠,则会中断POST数据
#重写条件%{REQUEST\u URI}!\。(php | html | gif | jpe | g | jpe | g | png | bmp | js | swf | css | ico | xml | txt | woff2 | woff)$
#重写规则^(.*)([^/])$http://%{http_HOST}/$1$2/[P,R=301]
#隐藏.svn文件夹
重写规则^(.*/)*\.svn/[NC,L]
#将所有图像和杂项文件发送到实际位置
重写cond%{DOCUMENT\u ROOT}%{REQUEST\u URI}-F
重写规则\(gif | jpe?g | jpe?g | png | bmp | js | swf | ico | xml | txt)index.php[NC,L]
#将文件夹发送到相关的php文件
重写cond%{REQUEST_FILENAME}-F
重写规则^([^/]+)/$$1.php
重写cond%{REQUEST_FILENAME}-F
#重写规则^([^/]+)/([^/]+)/([^/]+)/$$1/$2.php
重写规则^([^/]+)\/([^/]+)\/$1/$2.php
#重写规则^([^/]+)/([^/]+)/$$1/$2.php
重写规则^([^/]+)/([^/]+)/$$1/default.php
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_URI}!(\[a-zA-Z0-9]{1,5}|/)$
重写规则(.*)$/$1/[R=301,L]
#否则,如果找不到文件或目录,则通过索引进行处理
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则。index.php[L]
我在这里有很多其他的规则,如果需要的话我可以发布它们,但是因为这是一个特定的规则,我不知道为什么其中一个会覆盖它。欢迎指点

我试着把它放在mod_rewrite部分的顶部或底部,但这两个部分似乎都没有任何影响

我刚刚注意到,当我转到
/about/special offers/x
(其中x是任意字符串)时,它会加载正确的页面


Other

最终解决了这个问题,我用[L]将重写规则标记为final

相关部分:

# send folder to the relevant php file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)\/([^/]+)\/ $1/$2.php [L]

尝试禁用
多视图
,这通常是错误的罪魁祸首,如果你在虚假URL和真实的现有文件系统内容之间存在如此部分的重叠。嗯,我已经禁用了多视图,但仍然没有运气。看看是否能对正在发生的事情有所帮助;如果没有,那么向我们展示您完整的重写设置。(“转义”表达式中的斜杠应该是没有必要的。但至少根据前面提到的测试工具,它似乎也没有什么坏处。)使用该工具,它似乎是我第一次显式重写工作(/special offers.php)。但是我的子目录rewrite
RewriteRule^([^/]+)\/([^/]+)\/$1/$2.php
在这之后也可以工作(/a/b/到a/b.php)。。。但在这条规则之后,另一条规则重定向到/about/default.php,最后一条规则重定向到/index.php。我禁用了多视图,重写的优先级顺序是从上到下还是从下到上?