重写sometext / to some text / some text.php,禁止直接访问sometext.php

时间:2014-01-19 14:30:49

标签: regex .htaccess mod-rewrite

我几天都在挣扎。

文件夹结构是:

索引/文件/页/

在主文件夹(索引)中有 index.php - 这是整页中唯一的index.php文件。 在files文件夹中有php文件,实际上是网站的页面。 在文件夹中,还有几个文件夹(页面)包含不同的页面 - 我只是将php fiels分组到文件夹中以保持整洁。

我正试着解决这个问题。

  1. 当我输入网址时,如 index / files / pages / somename.php - 我想获得404或其他
  2. 当我输入 index / files / somename 这样的网址时 - 会将其重写为 index / files / pages / somename.php ,但地址看起来很干净。
  3. 现在无论我做什么,我都无法让这两条规则都起作用,无论是覆盖另一条规则还是什么都不起作用,我总是得到500条。

    这是我的规则,实际上有效:

    RewriteRule ^([-0-9a-z]+)$ pages/$1.php - 这是方案2,没问题。

    现在,当我添加处理直接访问php文件的规则时,之前的规则也会受到影响并被覆盖,所有内容都会抛出404,500等等。[L]等标志没有任何效果,也改变了顺序什么也没做。

    另外,我想禁止直接访问 index.php 并重定向到索引文件夹(并显示清理网址)

    这是我尝试过的一些额外规则,但没有结果。正如我之前所说,设置标志没有结果。

    RewriteCond %{REQUEST_URI} ^.*\/pages\/.*\.php$
    RewriteRule ^(.+)$ [R=404,L]
    
    RewriteRule ^([-0-9a-z]+)$ pages/$1.php 
    
    RewriteCond %{REQUEST_URI} ^(.+)\/index\.php 
    RewriteRule ^(.*)$ index/ [R=301,L]
    
    RewriteCond %{REQUEST_URI} ^\/(.*)\.php 
    RewriteRule ^(.*)$ [R=404,L]
    

    感谢和问候

1 个答案:

答案 0 :(得分:0)

请尝试以下规则:

RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^(.*?)index\.php$ index/ [L,R=302,NC,NE]

RewriteCond %{THE_REQUEST} \.php[\s?/] [NC]
RewriteRule ^ [F]

RewriteRule ^index/?$ index.php [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ /$1.php [L]