Mod rewrite htaccess重写

Mod rewrite htaccess重写,mod-rewrite,Mod Rewrite,我想把/anything.anyextension改写成/?post=anything 例如: /this-is-a-post.php转换为/?post=this-is-a-post或 /this-is-a-post.html转换为/?post=this-is-a-post甚至 /this-is-a-post/转换为/?post=this-is-a-post 我试过了 RewriteRule ^([a-zA-Z0-9_-]+)(|/|\.[a-z]{3,4})$ ?$1 [L] 但它不起作

我想把
/anything.anyextension
改写成
/?post=anything

例如:

  • /this-is-a-post.php
    转换为
    /?post=this-is-a-post
  • /this-is-a-post.html
    转换为
    /?post=this-is-a-post
    甚至
  • /this-is-a-post/
    转换为
    /?post=this-is-a-post
我试过了

RewriteRule ^([a-zA-Z0-9_-]+)(|/|\.[a-z]{3,4})$ ?$1 [L]
但它不起作用


非常感谢您的帮助。

如果您可以访问主服务器配置,请使用以下命令:

RewriteRule ^/(.+)\.\w+$ /?post=\1 [L]
如果没有,并且您被迫将其放入
.htaccess
文件中,您可以尝试

RewriteRule ^(.+)\.\w+$ /?post=\1 [L]

在任何一种情况下,这都假设您将只使用单个路径组件重写URL(即,如果您收到类似
/path/anywhere.anyextension
的请求,则可能无法按预期工作,需要修改重写规则以处理此问题)

您需要更好的方法来确定何时应用重写规则,否则,除非定义了异常,否则页面将无法显示外部JS或CSS

(或核心,Sapphire)提供了一个很好的方法,比如:

RewriteEngine On
RewriteCond %{REQUEST_URI} !(\.css)|(\.js)|(\.swf)$ [NC]
RewriteCond %{REQUEST_URI} .+
RewriteRule ^([^\.]+) /?post=$1 [L,R=301]
这要求URI不为空,不为JS、CSS或SWF,并重定向回根目录:

http://localhost/this-is-a-post.php
http://localhost/?post=this-is-a-post

如果您不希望重定向,但正在进行处理,请删除重定向规则
R=301

,这将无法捕获任何没有重定向的条目extensions@Ast:是的,这是期望的行为。