apachemod中的几个条件重写以生成自定义URL



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

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

事实上,我想在mod重写中使用提到的优先级来满足两个条件。

注意:当然,我应该能够在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的答案,但这是一个非常糟糕的主意(现在已经删除了他的答案!)

谢谢你的帮助。。。

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

我会将所有内容重写为/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-+]:任意字字符(包括_)和-

最新更新