我知道这是一个非常常见的话题,但没有一个解决方案适合我。 我试过几个答案:
和推荐链接。
我正在使用的htaccess代码:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
然后我将我的链接从services.html更改为服务,即我删除了扩展名,并使用ftp从文件名中删除了扩展名。
我得到的是我的浏览器中显示的页面代码而不是实际页面。
我已在服务器上检查了mod_rewrite,并且使用此代码正常工作
RewriteEngine On
Options +FollowSymLinks
RewriteRule ^joomla\.html http://www.joomla.org/? [R=301,L]
答案 0 :(得分:9)
您的文件仍应在服务器上具有.html
扩展名,否则服务器/浏览器不会将其解释为html而是将其解释为文本(这是您在浏览器中看到代码的原因)。因此,再次使用ftp重命名服务器上的文件。
为了让您的服务器在访问网址/test.html
时提供文件/test
,您需要在内部重写,即:
RewriteRule ^test[^/]$ test.html
^
匹配字符串的开头,$
与结尾匹配,因此只有在网址与test
完全匹配时才会重写。它会将该请求重写为test.html
。重写是内部的,这意味着它不会重定向浏览器(地址栏中的URL不会更改)。还有外部重写(规则附加[R]
),它会重定向浏览器。
此规则也仅匹配不以尾部斜杠结尾的网址([^/]
表示“不斜杠”)。稍后我们将使用尾部斜杠处理网址。
您可以为要重写的每个页面创建自定义RewriteRule
:
RewriteRule ^foo[^/]$ foo.html
RewriteRule ^bar[^/]$ bar.html
如果你有很多页面,这是很多工作,所以你可能想要重写所有的网址,例如应将foo
或bar
重写为foo.html
/ bar.html
,并将foo/bar
重写为foo/bar.html
。
您还可以使用正则表达式来匹配所有请求。但是,您应首先检查foo
实际上不是一个目录(可能包含index.html
并且是您要提供的子目录)。您还想检查foo
是否真的不是服务器文件系统上的文件。有两种重写条件可以检查(参见RewriteCond
directive):
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
现在,您可以为所有请求添加重写规则:
RewriteRule ^(.+[^/])$ $1.html
$1
是第一个捕获组的内容,正则表达式中的捕获组是放在()
括号中的表达式。 .
匹配任何字符,+
修饰符表示“一个或多个”。
请注意,这会导致重写循环导致500错误(see this answer),因此您还需要添加重写条件以检查文件系统上是否实际存在<request>.html
文件:
RewriteCond %{REQUEST_FILENAME}.html -f
此外,您可能不想重写已有.html
扩展名的网址。我不认为这是必要的,因为你已经有了上面的规则,在那种情况下检查<file>.html.html
可能不应该存在。但是如果你必须处理它,你可以添加另一个条件:
RewriteCond %{REQUEST_FILENAME} !^.+\.html$
总而言之,你的重写规则如下:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !^.+\.html$ # not really necessary
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+[^/])$ $1.html
您现在唯一需要处理的是具有尾部斜杠的网址。为此,我们只添加一个简单的外部重写规则,如果url实际上与目录不匹配,则删除尾部斜杠:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [R,L]
此规则仅匹配以/
(正则表达式/$
)结尾的网址,并在尾随斜杠之前捕获所有内容(正则表达式(.+)
),然后重定向到该组(其中不包含斜杠)。请注意规则背后的R
和L
flags。 R
用于重定向,用于重定向浏览器(地址栏中的网址更改)。 L
是最后一个,意味着在此之后不会应用其他规则,但重写后将再次应用规则,这是应用其他规则的地方。
<强> TL; DR 强>
RewriteBase /
# handle trailing slashes (if not a directory)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [R,L]
# rewrite rule that internally adds the .html extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+[^/])$ $1.html
答案 1 :(得分:-1)
Do Until b.Worksheets(1).Range("A" & j).Value = ""
sa = CleanString(a.Worksheets(1).Range("B" & i).Value)
sb = CleanString(b.Worksheets(1).Range("C" & j).Value)
oa = CleanString(a.Worksheets(1).Range("E" & i).Value)
ob = CleanString(b.Worksheets(1).Range("F" & j).Value)
If StrComp(sa, sb) = 0 And StrComp(oa, ob) = 0 Then
Passed = True
我还必须通过ftp从服务器中删除所有具有相同名称的文本文件。