【问题标题】:htaccess rewriting URLs with multiple forward slasheshtaccess 用多个正斜杠重写 URL
【发布时间】:2015-03-19 12:05:36
【问题描述】:

尝试制定一组 .htaccess mod_rewrite 规则来设置这些链接:

domain.com/content-page
domain.com/region/another-page
domain.com/region/brand/more-content-here

获取文件:

domain.com/content-page.php
domain.com/region-another-page.php
domain.com/region-brand-more-content-here.php

其中“地区”和“品牌”以及页面名称都是可变/可更改的。

到目前为止我有:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,C]
RewriteRule ([^/]+)/([^/]+) $1-$2 [NC,L] 

这有效,但仅适用于一个正斜杠。如上所述,域之后的 URL 可能没有、一或两个正斜杠。尝试扩展它以处理多个(或不)斜杠没有任何运气。

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    试试:

    RewriteEngine On
    
    # pass through root
    RewriteRUle ^(index\.php)?$ - [L]
    
    # no more / so add extension
    RewriteCond $1 !/
    RewriteCond $1 !\.php$
    RewriteCond ${REQUEST_FILEAME} !-f
    RewriteRule ^(.*)$ /$1.php [L]
    
    RewriteCond %{REQUEST_URI} !\.php$
    RewriteRule ^(.*)/(.*)$ /$1-$2 [L]
    

    【讨论】:

    • 一个问题——除了“domain.com”和“domain.com/”现在无法解析到索引页面外,一切正常。我得到一个 404。我希望对根域进行任何调用以获取“index.php”而不在 URL 中显示它。
    • @Dodo 尝试添加DirectoryIndex index.phpFallbackResource index.php
    • 感谢您的回复,但不幸的是这不起作用。如果没有重写规则,索引页面可以很好地解析域根目录。那里的东西弄乱了根域解析索引文件的能力......
    • @Dodo 尝试在顶部设置直通规则
    • 直通规则完美运行。非常感谢您的专业知识!
    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多