如何将这两者组合在一起;它就像“。(html | php)$” - 请提供代码。
注意,答案应该适用于所有文件扩展名:您对删除每个文件扩展名的想法是什么;评论所使用的代码 - 因为它很难找到。
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.html\ HTTP
RewriteRule (.*)\.html$ $1 [R=301]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.html [L]
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
答案 0 :(得分:0)
似乎你已经用
回答了你自己的问题就像“。(html | php)$”
你只需要尝试一下。看看这是否适合您对html and php
个文件进行分组。
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.(php|html)\ HTTP
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/]+)/?$ $1.php [L]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^/]+)/?$ $1.html [L]
还有另一种可能的解决方案。是不使用上面的代码并使用MultiViews。下面的一行代码。
Options +FollowSymLinks +MultiViews
答案 1 :(得分:0)
不幸的是,这是不可能的。
RewriteCond
的 TestString 部分只能包含普通字符串,并允许服务器变量(例如HTTP_REFERER
)和反向引用({{1}例如,}和$1
。
因此,您不能在 TestString 中包含表达式 - 只有 CondPattern (%1
的第二部分)允许使用表达式。
你可以做的最好的事情是使用一个表达式去掉你不想要的扩展名,然后,对于你已经剥离的每个扩展名,确定它是否存在并相应地重写 - 如下所示:
RewriteCond
附注:如果Apache在RewriteEngine on
# Step 1: Strip out extensions you don't want for files that actually exist
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.(html|php)\ HTTP
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ %1 [R=301,L]
# Step 2: For each extension stripped, rewrite for existing files
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule (.*) $1.html [L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]
文件中实现某种循环,那将会非常棒 - 这有助于简化这种方法。不幸的是,事实并非如此,所以上面几乎是最好的方法。