【问题标题】:Custom PHP/SQL CMS htaccess rules自定义 PHP/SQL CMS htaccess 规则
【发布时间】:2018-10-21 18:59:56
【问题描述】:

我已经使用名为 blog-post.php 的动态帖子模板制作了一个自定义 PHP/Sql cms

我正在像这样拉入内容:

http://www.example.com/news/blog-post.php?slug=sample-slug-from-database

这允许我使用相同的模板提取任意数量的帖子,从数据库中提取信息。

我花了 4 个小时尝试使用 htaccess 实现以下目标 ..

  1. 强制使用斜杠而不是 .php 扩展名
  2. 强制博客帖子网址显示为:

http://www.example.com/sample-slug-from-database/

而不是

http://www.example.com/news/blog-post.php?slug=sample-slug-from-database

非常感谢任何帮助。

【问题讨论】:

    标签: php sql .htaccess mod-rewrite


    【解决方案1】:

    对于其他苦苦挣扎的人 - 这是我的最终代码:

    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
    RewriteRule ^ %1/ [R,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !/$
    RewriteRule . %{REQUEST_URI}/ [L,R=301]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.*?)/?$ $1.php [L]
    
    RewriteEngine On
    RewriteRule ^(.*)\/$ blog-post.php?slug=$1 [L,QSA]
    

    【讨论】:

      【解决方案2】:

      虽然您首选的 URL 方法是重定向所有内容,例如/sample-slug-from-database/,我认为最好采用不那么严格的实现,例如/news/sample-slug-from-database/

      不管怎样,这是第一个实现:

      # URL
      # INPUT http://www.example.com/random-slug/
      # OUTPUT http://www.example.com/news/blog-post.php?slug=random-slug 
      
      RewriteEngine On
      RewriteRule ^(.*)\/$ news/blog-post.php?slug=$1 [L,QSA]
      

      第二种方式:

      # URL
      # INPUT http://www.example.com/news/random-slug/
      # OUTPUT http://www.example.com/news/blog-post.php?slug=random-slug
      
      RewriteEngine On
      RewriteRule ^news\/(.*?)(\/(.*?)*)$ /news/blog-post.php?slug=$1 [L]
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 2017-01-07
      相关资源
      最近更新 更多