【问题标题】:does mod_rewrite on file extensions interfere with verification files?文件扩展名上的 mod_rewrite 会干扰验证文件吗?
【发布时间】:2013-03-04 13:23:09
【问题描述】:

我目前正在使用 mod_rewrite 从文件中删除 .HTML 扩展名,并重定向到其友好版本。

我使用 pinterest.html 和 google.html 文件来验证我的 Pinterest 页面和 Google Apps 帐户。

对于 mod_rewrite,我使用的是这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

我的问题是关于验证文件的逻辑和功能。据我了解,目的是为'x' file 和'y' URL 服务。

因此,即使由于重定向和 .HTML 删除,我将 example.com/pinterest.html 服务为 example.com/pinterest,也不应该有任何干扰,因为文件仍然像往常一样可读,对吗?

【问题讨论】:

    标签: html url mod-rewrite google-apps pinterest


    【解决方案1】:

    不要重写这两个特殊文件。向 cond 正则表达式添加否定断言:

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(?!pinterest\.html|google\.html).*\.html\ HTTP/ 
    

    PS。为什么不直接匹配%{REQUEST_URI}?

    RewriteCond %{REQUEST_URI} !(pinterest|google)\.html$
    RewriteCond %{REQUEST_URI} \.html$
    

    我用简单的正则表达式重写了这个。这说的是不匹配这两个特殊文件,但匹配任何其他对.html 文件的请求。

    【讨论】:

    • 感谢您的解决方案,我对 mod_rewrite 不是很熟悉,这只是我从另一个 stackoverflow 问题的答案中使用的代码。介意我问别的吗?最后,HTTP/ 的目的是什么?如果我从 FILENAME 切换到 URI,具体会有什么不同?
    • 再次感谢。尝试了一些不同的组合,只得到以下工作:RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^(.+)$ $1.html [L,QSA] RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(?!pinterest\.html|google\.html).*\.html\ HTTP/ RewriteRule ^(.*)\.html$ /$1 [R=301,L] 我正在阅读 apache.org 上的 REQUEST_URI、REQUEST_FILENAME 和 THE_REQUEST 之间的差异。 REQUEST_URI 似乎是最好的,但我不确定如何实现它。为了获得最佳性能,我可以在上面的重写中进行哪些更改?
    • REQUEST_URI 包含查询参数,因此如果您不使用它们,这与REQUEST_FILENAME 相同。因此,如果您使用它们,要么将 $ 锚点放到字符串末尾,要么使用 FILENAME 变体。
    猜你喜欢
    • 2011-05-13
    • 2014-11-06
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    相关资源
    最近更新 更多