【问题标题】:htaccess rewrite get just filenamehtaccess rewrite 只获取文件名
【发布时间】:2014-01-13 10:15:27
【问题描述】:

基本上,我试图通过仅从某些目录(SEF 格式,因此没有 .php 或 .html)获取文件名来重写它们,然后重写它们。

例如,我想更改以下所有(和其他类似)目录

index.php/dir1/dir2/filename
index.php/dir1/filename
index.php/dir1/dir4/dir5/filename

然后回来就行了

index.php/filename

显然文件名在每种情况下都不同,并且有很多不同的目录组合,所以我更喜欢通配符,这样所有以 dir1 开头的目录都会被删除。

我对 htaccess 还是很陌生,虽然我可以为每个不同的目录结构编写规则,但我的 htaccess 文件中的规则太多了。当然,我可以使用一个通配符,它​​可以简单地删除所有以 dir1 开头的目录结构并保留文件名?

非常感谢!

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案1】:

    将此代码放入您的DOCUMENT_ROOT/.htaccess 文件中:

    RewriteEngine On
    
    RewriteCond %{THE_REQUEST} \s/+(index\.php)/dir1.*?/([^\s/?]+)\s [NC]
    RewriteRule ^ /%1/%2 [L,R=302]
    

    【讨论】:

    • 谢谢你,但它似乎仍然不起作用;它取出 DIR1 但仍然保留以下任何内容(即它不会删除文件名之前的其他目录)。因此它将给出:第一个示例的 index.php/dir2/filename。
    • 不幸的是,这根本没有做任何改变。完整的 URL 没有改变。
    • 哦,我犯了一个错误,现在修复它。你可以试试看。
    • 太棒了,anubhava - 我只需要稍微调整一下 RewriteCond %{THE_REQUEST} \s/+(index\.php)/DIR1/.*?/([^\s/?]+ )\s [NC] 现在它工作正常。非常感谢你的帮助! :)
    • 是的,这更好,因为它只针对 dir1。 (我的答案更新了)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多