【问题标题】:mod rewrite htaccess issuemod重写htaccess问题
【发布时间】:2021-02-02 13:02:29
【问题描述】:

底部的 4 条重写规则可以正常工作,但是一旦我添加了第一条规则,以便我可以从标准页面中隐藏 .php 扩展名(例如 about.php),那么最后一条规则就停止工作了吗?

根据最后一条规则,我希望 URL 是 domain.com/123 但页面实际上是 /offer.php?id=123

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^preview/([^/]*)$ /create-preview.php?id=$1 [L]
RewriteRule ^update/([^/]*)$ /update.php?id=$1 [L]
RewriteRule ^delete/([^/]*)$ /delete.php?id=$1 [L]
RewriteRule ^([^/]*)$ /offer.php?id=$1 [L]

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    像这样:

    Options -MultiViews
    RewriteEngine On
    
    RewriteRule ^preview/([^/]+)/?$ create-preview.php?id=$1 [L,QSA,NC]
    
    RewriteRule ^(update|delete)/([^/]+)/?$ $1.php?id=$2 [L,QSA,NC]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f
    RewriteRule ^(.+?)/?$ $1.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]+)/?$ offer.php?id=$1 [L,QSA]
    

    变化是:

    1. 禁用MultiViews(内容协商),因为有两种情况下php文件名与起始路径名相同,即/update/delete
    2. 使用正则表达式将以上 2 条规则合并为一条
    3. php 扩展规则放在这些规则之后和最后一个前端控制器规则之前
    4. 最后一个前端控制器规则需要 2 个RewriteCond 才能跳过物理文件和目录。

    【讨论】:

    • 这是很棒的代码,简直太棒了,谢谢分享先生,谢谢你,我尽力帮助但无法:)
    • 不客气,希望它适用于 OP
    • 你们太棒了!谢谢@anubhava 成功了!并感谢 RavinderSingh13
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多