0

在我的域 example.com 中,我想将所有页面文件放在根目录中,例如名为file。因此,例如我将about.php放在文件目录中,并希望让用户使用以下 URL 访问此页面:example.com/about
或例如将用户目录放在文件目录中并将login.php放入其中,并希望让用户通过以下方式访问它:example.com/user/login
事实上,我想从 URL 中删除 .php 和文件。

如果这些文件不存在,它应该在根目录加载一个默认文件,如index.php 。例如 URL example.com/blabla 应该映射到index.php

实际上,我想在 mod rewrite 中以上述优先级设置两个条件。

注意:当然,我应该能够在about.php 之类的文件中使用 $_GET 之类的变量

更新:总之,它应该使用这个逻辑:

if the URI isn't a file or directory{
    if file/URI.php is a file
        load file/URI.php
    else
        load index.php
}

有人给出了使用的答案ErrorDocument 404 index.php,但这是一个非常糟糕的主意(现在已经删除了他的答案!)

谢谢你的帮助...

4

1 回答 1

0

如果可能的话,有条件的重写(如果页面存在)听起来像是一个糟糕而复杂的想法。

我会将所有内容重写/index.php并从那里控制所有内容:

  • 如果 url 的组件指向现有页面,请使用/包含该内容;
  • 如果未找到有效页面,请提供您的原始索引内容。

针对您的情况的示例重定向规则:

RewriteEngine on
RewriteBase /

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^.*$ /index.php?id=$1 [QSA,L]

将包含请求的路径id并附加来自原始查询字符串(QSA标志)的变量。

对于您的示例,更具体的/user/login是:

RewriteRule ^([\w-]+)/([\w-]+)$ /index.php?path=$1&file=$2 [QSA,L]
  • [\w-+] :任何单词字符(包括_)和-
于 2012-12-15T21:53:29.027 回答