【问题标题】:mod_rewrite and titles with '.php' extensionmod_rewrite 和带有“.php”扩展名的标题
【发布时间】:2011-08-14 19:03:41
【问题描述】:

我有一个数据库,它有一个像this-is-the-title.php 这样的 url 列 我想在这里激活 mod_rewrite:

Options +FollowSymlinks
RewriteEngine On
RewriteRule ^([a-zA-Z0-9-/]+)$ news.php?url=$1
RewriteRule ^([a-zA-Z0-9-/]+)/$ news.php?url=$1

但我对.php 扩展有疑问。此规则仅适用于 this-is-the-title 而不是 this-is-the-title.php 。有什么办法可以用扩展名为 .php 的标题主动重写模组,或者我必须更改标题?

提前致谢

【问题讨论】:

    标签: php mod-rewrite


    【解决方案1】:

    您的重写规则不允许点字符...如果您希望 something.php 匹配,请使用:

    ^([a-zA-Z0-9-/.]+)$

    我还简化了可能存在尾部斜线的事实:由于已经允许使用斜线,因此尾部斜线也将匹配。

    不要忘记添加一些 rewriteconds 以避免重写现有目录或文件:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    

    顺便说一句,为重写的 URL 添加 php 扩展没有任何意义,您应该坚持使用完全没有扩展的干净 URL。

    所以你最终会得到这样的结果:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([-/.a-zA-Z0-9]+)$ news.php?url=$1 [QSA,L]
    

    【讨论】:

    • 成方的 parentesys 没有必要逃跑。)
    【解决方案2】:

    也许使用类似于

    的规则
    RewriteRule ^([a-zA-Z0-9-/]+)\.php$ news.php?url=$1 [L]
    

    ?

    【讨论】:

    • 我在想他只需要一个规则来匹配要重写的 url,而不是整个集合。
    • 一些教育不会受到伤害 ;-)
    猜你喜欢
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多