【问题标题】:I have .htaccess rewrite rure which also rewrite folders我有 .htaccess rewrite rure 也重写文件夹
【发布时间】:2018-05-07 12:58:30
【问题描述】:

这是我的代码:

RewriteRule    ^([A-Za-z0-9-]+)/?$    index.php?category=$1    [NC,L]
RewriteRule    ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)    index.php?category=$1&subcategory=$2    [NC,L]

现在的问题是,它实际上将目录和子目录分别视为类别和子类别。我尝试了许多不同的解决方案来保持目录不变,但似乎都没有。

有人建议我:

RewriteCond %{REQUEST_FILENAME} -d [NC]
RewriteRule .* - [L]

RewriteCond %{REQUEST_URI} !^/css
RewriteCond %{REQUEST_URI} !^/js
RewriteCond %{REQUEST_URI} !^/images
RewriteCond %{REQUEST_URI} !^/digitalserp
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]

直到现在都没有工作。请建议我在不重写所有 CSS、JS 和图像的情况下制作干净的 URL(如 http://www.example.com/category/sub-category)的最佳方法。

谢谢

【问题讨论】:

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


    【解决方案1】:

    尝试使用END 而不是L。它阻止了所有进一步的重写,因为 Apache 循环直到找不到更多匹配规则,或者循环通过达到限制而终止。如果您因为 Apache 太旧而无法使用 END,则将 DPI 添加到您的原始规则中,这样路径就不会转移到后续循环中。

    RewriteRule ^([A-Z0-9-]+)/?$ index.php?category=$1 [NC,B,QSA,END]
    RewriteRule ^([A-Z0-9-]+)/([A-Z0-9-]+)/? index.php?category=$1&subcategory=$2 [NC,B,QSA,END]
    

    【讨论】:

    • 谢谢我的问题实际上是通过这段代码解决的:<IfModule mod_rewrite.c> #Disable rewriting RewriteEngine Off </IfModule>我已经把这段代码放在了.htaccess中,并上传到了css和js文件夹中。我现在工作,但也会尝试你的想法来检查最好的方法。非常感谢@Walf
    • @PrashantRajpoot 这没有任何意义;您使重写规则起作用的解决方案是完全禁用重写?
    • 是的,这是在 CSS 和相关文件夹中禁用重写的临时解决方案。在我重新开始那个项目后,我会尝试你的答案。如果它有效,我也会让你知道。感谢@Walf 的帮助。
    • 规则中不需要使用END,因为规则的模式和目标路径不同。 L 在这种情况下很好。
    • @starkeen 您正在对环境进行假设。发帖人并不总是给出他们全部的.htaccess 内容,如果这样一个简单的规则失败了,通常是因为其他人的干扰。此外,END 是将虚拟 URL 映射到文件的最佳实践; L 应该只用在 URL 可能需要进一步重写的地方。
    猜你喜欢
    • 2013-04-16
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多