【问题标题】:RegEX for URLrewriting if NOT ".php" in the path如果路径中没有“.php”,则用于 URL 重写的正则表达式
【发布时间】:2009-06-22 21:37:32
【问题描述】:

我的老板要我编写一个 URL 重写代码,比如说“http://our.domain.com/SomeText”——也就是说,如果 URL 不包含“.php”或“.html”,它应该由类似“ http://our.domain.com/process.php?string=SomeText"。 这可以用一个简单的正则表达式吗?我只是找不到合适的表达方式来做到这一点。 我首先将请求重定向到一些特殊的子目录,但现在它应该直接工作而无需任何进一步的子目录,所以我不得不将现有页面的常规请求与不包含“.php”或“.html”的请求分开。 .

对我有什么建议或链接吗?

最好的问候, 罗马。

【问题讨论】:

    标签: php url-rewriting


    【解决方案1】:

    这样的事情应该可以解决问题

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !\.php
    RewriteCond %{REQUEST_URI} !\.html
    RewriteRule (.*) /process.php?string=$1 [QSA]
    

    有一些关于这是否会进入 .htaccess 或直接进入 VirtualHost 定义(放置或不放置前导 /)的警告。

    另外你应该加载 mod_rewrite。

    所有这一切都假设您实际使用的是 Apache 并且可以使用 mod_rewrite。

    这样做的目的是,如果请求的 URI 不包含字符串 .php 和 .html ,那么它会在内部将请求重定向到 process.php 文件,并使用查询字符串参数编写的内容。

    如果您对此有疑问,请使用

    RewriteLog "/tmp/rewrite.log"
    RewriteLogLevel 9
    

    并检查它是如何工作的。为此,您必须控制服务器,因为它必须在主配置文件中使用(不能使用 .htaccess)。

    【讨论】:

      【解决方案2】:

      使用 mod_rewite 你可以这样重写 .php 和 .html URL:

      RewriteEngine on
      RewriteRule !\.(php|html)$ process.php/$1 [NC] [QSA]
      

      但是,您可能还想阻止它将 URL 重写为实际存在的文件。 (可能还有其他文件 - 图像/css 等您不想被重写)您可以修改上述内容以添加检查:

      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule !\.(php|html)$ process.php/$1 [NC] [QSA]
      

      添加此检查可能意味着您实际上不需要检查扩展名是否为 .php 或 .html 以外的任何内容,因为您知道只有在请求的文件不存在时才会重写它,因此您可以修改RewriteRule 行是这样的:

      RewriteRule ^(.*)$ process.php/$1 [NC] [QSA]
      

      这意味着任何不作为文件存在的请求 URL 将由 process.php 处理。

      【讨论】:

      • 谢谢你一千次,也给所有回答我问题的人一个拥抱!这个解决方案恰到好处,我很高兴我现在不必阅读 O'Reilly 的 RegEx 圣经。效果很好!
      【解决方案3】:

      为什么你不使用 mod rewrite ?

      解释链接:

      http://www.workingwith.me.uk/articles/scripting/mod_rewrite

      【讨论】:

        【解决方案4】:

        至少在 mod_rewrite 中,您可以使用匹配 .php 和 .html 的正则表达式,然后在前面加上一个 !,这应该否定它。

        【讨论】:

          猜你喜欢
          • 2022-11-22
          • 2023-01-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多