【问题标题】:Rewrite different page with .htaccess url rewrite用 .htaccess url rewrite 重写不同的页面
【发布时间】:2015-05-18 17:41:45
【问题描述】:

我想使用 .htaccess 进行 url 重写。 在我之前的post 中,您已经向我展示了如何对 index.php 页面执行此操作,但现在也想对其他页面(如 browser.error.php 等)执行此操作。 为此,我尝试在 .htaccess 中添加最后 2 行,但不幸的是,如果我尝试链接 www.mysite/browser-error/ 它不起作用 - 在索引页面中返回我。

Options +FollowSymLinks
RewriteEngine on

RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L,NC]
# rule to ignore files and directories from all rewrite rules below
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^(.*)/(.*)/(.*)\/?$ index.php?op=$1&idric=$2&sp=$3 [L,QSA,NC]
RewriteRule ^(.*)/(.*)\/?$ index.php?op=$1&idric=$2 [L,QSA,NC]
RewriteRule ^(.*)\/?$ index.php?op=$1 [L,QSA]

#NEW ADDED ROWS
RewriteRule ^browser-error/(.*)\/?$ browser.error.php?r=$1 [L]
RewriteRule ^browser-error\/?$ browser.error.php [L]

我哪里做错了?我要怎么走?谢谢

【问题讨论】:

    标签: .htaccess url-rewriting


    【解决方案1】:

    我建议避免使用 .* 并使用 [^/]+ 来重新排序您的规则:

    Options +FollowSymLinks -MultiViews
    RewriteEngine on
    
    RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L,NC]
    # rule to ignore files and directories from all rewrite rules below
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]
    
    #NEW ADDED ROWS
    RewriteRule ^browser-error/([^/]+)/?$ browser.error.php?r=$1 [L,QSA,NC]
    RewriteRule ^browser-error/?$ browser.error.php [L,NC]
    
    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?op=$1&idric=$2&sp=$3 [L,QSA]
    RewriteRule ^([^/]+)/([^/]+)/?$ index.php?op=$1&idric=$2 [L,QSA]
    RewriteRule ^([^/]+)/?$ index.php?op=$1 [L,QSA]
    

    【讨论】:

    • 似乎很完美!如果您添加其他规则(comunication.php),我必须使它们像浏览器错误一样?谢谢!
    • 是的,这是正确的,只需将它们添加到index.php 规则之前的中间即可。
    • 具有相同的标志? L,QSA,NC 和 L,NC?
    • 是的,[L,QSA,NC] 也足够了。
    【解决方案2】:

    您在此规则之前有规则。这会使您的请愿书在达到您的规则之前更改为 index.php。 (它们都有 L 标志,使它们成为最后处理的规则)。由于它们不限于在 url 出现浏览器错误时不应用,它们将在每个 ///* 或类似的请求上运行。

    然后,您应该添加 RewriteCond 以否定其他 RewriteRules 中的浏览器错误 url,如下所示:

    如果这不是您所需要的,请尝试并发表评论,因为它不能按预期工作。

    希望对你有帮助

    Options +FollowSymLinks
    RewriteEngine on
    
    RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L,NC]
    # rule to ignore files and directories from all rewrite rules below
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]
    
    RewriteRule ^(.*)/(.*)/(.*)\/?$ index.php?op=$1&idric=$2&sp=$3 [L,QSA,NC]
    
    RewriteCond %{REQUEST_URI} !^browser-error\/?(.*)?\/?%
    RewriteRule ^(.*)/(.*)\/?$ index.php?op=$1&idric=$2 [L,QSA,NC]
    
    RewriteCond %{REQUEST_URI} !^browser-error\/?(.*)?\/?%
    RewriteRule ^(.*)\/?$ index.php?op=$1 [L,QSA]
    
    #NEW ADDED ROWS
    RewriteRule ^browser-error/(.*)\/?$ browser.error.php?r=$1 [L]
    RewriteRule ^browser-error\/?$ browser.error.php [L]
    

    【讨论】:

    • 不幸的是,没有任何效果,甚至没有重写 url 到 index.php
    • 我确实做了更改,抱歉(现在不能在这里尝试)
    • 谢谢,但 anubhava 解决方案非常适合我
    • 我要告诉你这个解决方案更好(重新排序规则,并清理)+1 对他!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多