【问题标题】:.htaccess rewrite all characters.htaccess 重写所有字符
【发布时间】:2017-09-20 23:15:57
【问题描述】:

我需要什么模式来重写请求的 URL 中的所有字符?我试过了:

RewriteRule ^([a-z\-_0-9]+)/([^/.]+)$ index.php?engine=$1&q=$2 [NC,L]

但是点 . 没有被识别。

【问题讨论】:

    标签: regex .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    (.*) 将匹配所有字符。这就是你所需要的。

    【讨论】:

    • 但是我在网站上的图片遇到了一些问题,如果我把这些 ruke 放在下面,它们就不会出现:^([a-z\-_0-9]+)/(.*)$ index .php?engine=$1&q=$2有什么线索吗?
    【解决方案2】:

    要匹配所有内容,您可以使用:^(.+)/(.+)/?$(带有可选的斜杠)

    如果您想坚持使用字符类的现有格式,这里会遇到一些问题。在字符集/类中,您应该始终将连字符放在末尾以获得有效的正则表达式。您还省略了大写字符。因此,要匹配您想要的基本字母数字、下划线和连字符:

    [a-zA-Z0-9_-]
    

    或者,使用字符转义:

    [\w\d_-]
    

    您的第二组括号目前专门排除句点和斜线,与所有其他人匹配。

    如果您的应用程序数据定义明确,您可能希望使用已定义的字符类,并在所有其他数据上使用 404。如果您想要一揽子重定向,那么以下内容应该可以解决您的问题:

    RewriteRule ^(.+)/(.+)/?$ index.php?engine=$1&q=$2 [NC,L]
    

    【讨论】:

    • 它正在工作(答案(*)和你的@tomwalsham,但为什么图像消失了?作为不正常或重新更改的路径,有什么线索吗?
    • 您将需要使用 标记将站点上的所有相关引用重置为 base,与 mod_rewrite 一样,它们被解释为在子文件夹中执行。跨度>
    • mmm 不工作,你确定这是 php 文件的问题而不是 .htaccess 的问题吗?
    • 如果页面加载正常,但图像损坏,这要么是图像的相对路径被 mod_rewrite 破坏的问题,要么是您还将图像路径重写为转到 index.php 在 Firefox 中,您可以右键单击->查看图像以查看您是否正在加载主文件。或者,您将需要使用不那么广泛的正则表达式或 rewritecond。
    • RewriteCond %{REQUEST_URI} !^/images/ 在 RewriteRule 行之前可能会对您有所帮助(假设您的图像都包含在 /images/
    【解决方案3】:

    这是肯定的,因为图像甚至 favicon.ico 将被“重写”到您的 index.php,请尝试使用这些规则排除“静态”文件和目录。此代码将读取真实存在的任何内容,如果不是,它会将其重定向到您的 index.php 进行处理:

    RewriteEngine   On
    RewriteBase     /
    RewriteCond     %{REQUEST_FILENAME} !-f
    RewriteCond     %{REQUEST_FILENAME} !-d
    #RewriteCond    %{HTTP_HOST}    ^(^.*)\.mydomain.com$
    RewriteRule     .               /index.php              [L]
    

    排除“某些”文件或目录的另一种方法是使用如下行:

    RewriteCond %{REQUEST_URI} !^(/index\.php|/img|/js|/css|/robots\.txt|/favicon\.ico)
    

    【讨论】:

      猜你喜欢
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 2014-03-25
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多