仅在使用mod_rewrite找到文件时替换URL

时间:2011-11-12 14:09:11

标签: php .htaccess mod-rewrite http-status-code-404

  

这是我的工作方式:

  1. 用户键入网址
  2. mod_rewrite处理表单的URL:^([^/\.]+)/?$(第一个 路径中的段)
  3. 并将其重定向到索引页面:struct.php?page=$1
  4. 在索引页面(struct.php)中我请求页面的内容 ($ _GET ['page'])如果存在:

    $content = @file_get_contents("pages/$_GET[page]/.content")

  5. 如果内容不存在,我只需要请求页面内容 'not_found/.content'
  6. 这是有效的,但我想在脚本中保持简单,并使用mod_rewrite的强大功能来仅请求存在的页面。

      

    以下是我想做的事情:

    1. 用户键入网址
    2. mod_rewrite处理表单的URL:^([^/\.]+)/?$(第一个 路径中的段)
    3. 并仅在找到.content文件后将其重定向到索引页 struct.php?page=$1
    4.   

      这是我的尝试:

      <IfModule mod_rewrite.c>
        RewriteEngine on
      
        RewriteCond pages/$1/.content -f
        RewriteRule ^([^/\.]+)/?$ struct.php?page=$1 [L]
      </IfModule>
      

      注意:我正在使用.htaccess文件

2 个答案:

答案 0 :(得分:1)

这是我的解决方案:

RewriteEngine On

RewriteCond %{REQUEST_URI} ^([^/\.]+)/?
RewriteCond %{DOCUMENT_ROOT}/%1/.content -f
RewriteRule ^([^/\.]+)/? struct.php?page=$1 [PT,QSA,L]

答案 1 :(得分:0)

您是否尝试过以下操作?

RewriteEngine on

RewriteCond %{QUERY_STRING} ^([^/\.]+)/?
RewriteCond /absolute/path/pages/$1/.content -f
RewriteRule ^.*$ struct.php?page=$1 [PT,QSA,L]

我没有测试过这个,所以我不确定它是否有效,但你应该试一试。

请记住将/ absolute / path /更改为pages文件夹的绝对路径。