.htaccess如何运作?

Kyl*_*Yeo 2 apache url .htaccess mod-rewrite

我正在尝试让我的网站将其他网页显示为www.example.com/pageone/链接,而不是www.example.com/pageone.html.

问题是,我正在阅读使用.htaccess的方法,因为我不理解命令而让我感到困惑.

我知道第一步是在.htaccess文件中写这个:

RewriteEngine On
Run Code Online (Sandbox Code Playgroud)

在这一步之后,我完全不知道什么!-d也不是{REQUEST_FILENAME}也不是^(.*)和所有编程文本.有没有我可以参考的文件?

或者任何人都可以为我提供一个简单的解释,说明如何配置.htaccess文件以了解我是否想去

www.example.com/pageone.html
Run Code Online (Sandbox Code Playgroud)

,我需要输入的URL是

www.example.com/pageone/
Run Code Online (Sandbox Code Playgroud)

和PHP文件等?

Mad*_*iha 6

首先,有官方文档.为了解决你的具体问题,我会这样做:

RewriteEngine on #Turn on rewrite

RewriteCond %{REQUEST_FILENAME} !-f #If requested is not a filename...
RewriteCond %{REQUEST_FILENAME} !-d #And not a directory
RewriteRule ^([^/]+)/?$ /$1.html [L] #Preform this redirect
Run Code Online (Sandbox Code Playgroud)

RewriteCond唯一适用于下一以下规则.如果您有多个规则,则需要为每个规则编写条件.

现在,Apache服务器匹配请求的路径(www.example.com/之后的所有内容),以查看它是否与您指定的任何规则匹配.在这种情况下,只有一个:

^([^/]+)$
Run Code Online (Sandbox Code Playgroud)

此正则表达式匹配任意数量的字符,这些字符不是斜杠/,后跟可选的尾部斜杠.如果找到匹配,它将把请求重写为第二个参数:/$1.html,$1表示"无论括号之间是否匹配",在我们的例子中是所有非斜杠字符.

[L]标志告诉重写引擎在匹配此规则时停止查找规则.

所以总结一下,将在服务器上进行重写www.example.com/whatever/www.example.com/whatever.html