繁体   English   中英

重写我的.HTACCESS文件

[英]Re-writing my .HTACCESS file

我知道这个问题已经在这个论坛上多次发布。

而且,我按照给出的每个示例进行操作。 尝试了每个代码。

而且,我仍然无法产生期望的结果。

我在重写.HTACCESS文件时遇到问题

基本上,我想做4件事:

(a)删除所有PHP扩展

(b)删除所有HTML扩展名

(c)删除任何斜杠

(d)在所有网址的末尾添加一堆“乱码”,

因此,未经训练的眼睛看不到链接。

关于如何处理第四个问题,我还没有找到任何在线信息

至于前三个,我是从在线教程中得到的:

 # BEGIN WordPress
 <IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /
 RewriteRule ^index\.php$ - [L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule . /index.php [L]

 # remove the .html extension
 RewriteCond %{THE_REQUEST} ^GET\ (.*)\.html\ HTTP
 RewriteRule (.*)\.html$ $1 [R=301]

 # remove the .php extension
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^([^\.]+)$ $1.php [NC,L]

 # remove trailing slash if not a directory
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_URI} /$
 # RewriteRule (.*)/ $1 [R=301]
 RewriteRule ^([^/]+)/$ /$1 [R=301,L,NE]

 </IfModule>
 # END WordPress

但是,它不起作用。

在我的HTML / PHP文件中,我尝试通过删除扩展名来运行测试。

例如,我更改了:

<"/My_folder/begin.html">  to <"/My_folder/begin">

我删除了HTML扩展名(对PHP文件也是如此)

我有,

404错误:“找不到页面”

显然,我的HTACCESS文件是错误的。

但是,不确定是什么问题:(

更新

经过广泛研究,这是我创建的HTACCESS文件的内容:

 # disable directory browsing
 Options -Indexes

 # enable Multiviews
 Options -MultiViews

 # allow server to process and follow all "fictional" URLs.
 Options +FollowSymlinks

 # BEGIN WordPress
 <IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /
 RewriteRule ^index\.php$ - [L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule . /index.php [L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^([^/]+)/$ $1.php [NC,L]
 RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
 </IfModule>

 # END WordPress

但是,它仍然无法正常工作

更新

我终于让它工作了

我只是从代码中注释掉了其他每一行,只留下了这一点:

 # BEGIN WordPress
 <IfModule mod_rewrite.c>
 # disable directory browsing
 Options -Indexes
 # enable Multiviews
 Options -MultiViews
 # allow server to process and follow all "fictional" URLs.
 Options +FollowSymlinks

 RewriteEngine on 
 RewriteCond %{REQUEST_FILENAME} !-d 
 RewriteCond %{REQUEST_FILENAME}\.php -f 
 RewriteRule ^(.*)$ $1.php

 #RewriteEngine On
 #RewriteBase /
 #RewriteRule ^index\.php$ - [L]
 #RewriteCond %{REQUEST_FILENAME} !-f
 #RewriteCond %{REQUEST_FILENAME} !-d
 #RewriteRule . /index.php [L]
 #RewriteCond %{REQUEST_FILENAME} !-f
 #RewriteRule ^([^/]+)/$ $1.php [NC,L]
 #RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
 </IfModule>

 # END WordPress

对于我自己的世界,我一开始无法弄清楚到底是什么困扰着代码。

显然, htaccess可以接受数百行代码。

但是,如何以适当的顺序对其进行分层? 因为,通过消除的过程(即,分别注释掉每一行),我可以得出我的代码语法错误的结论!

但是,为什么呢?

我应该在每个规则之前声明一个条件(COND)吗?

像这样 :

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

或者...........我只应一次声明条件..........然后纠正下面的所有规则:

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule . /index.php [L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^([^/]+)/$ $1.php [NC,L]
 RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php

我已经检查了所有可用的在线教程,并且在任何地方都没有解决这一点。

要回答您在评论中提到的问题。.您的htaccess配置正确。

我在网上找到了一个很好的解释性答案。 连结这里

经过多次回旋尝试后,我设法以所需的方式进行URL重写,以便为我的网站(例如domain.com/thispage)制作漂亮的无扩展名URL。

因为我个人发现htaccess和mod-rewrite除了痛苦的技术apache文档外,文档很少,所以我想我应该分解一下我正在使用的代码:

选项+ FollowSymlinks首先,为了安全起见,我们确保启用FollowSymlinks选项,以便服务器实际处理并遵循我们的“虚构” URL。

RewriteEngine On RewriteEngine是将执行所有工作的mod-rewrite工作程序,因此我们必须将其打开。

RewriteBase / yourdir这使我们可以将任何目录设置为重写的基础,并且由于我们不必处理讨厌的基础目录,因此可以更轻松地编写正则表达式和重写。 将代码从开发服务器上的目录迁移到活动站点的根目录时,它也非常方便。

RewriteCond%{REQUEST_URI}!(。[^。/] +)$由于我们不想使任何现有文件都无法访问,因此请确保URI(在这种情况下,是基本目录后的URL部分)不会没有文件扩展名。 正则表达式从字面上更进一步地检查它是否“不包含句点,后跟一个或多个不是句点或斜杠的字符”。

RewriteCond%{REQUEST_FILENAME}!-d告诉重写引擎不要重写URL,如果该URL与服务器上具有目录标志的现有名称匹配(即,如果它是目录)。

RewriteCond%{REQUEST_FILENAME}!-f同样,该命令告诉它不要重写现有文件的名称。

RewriteRule ^(。*)yourscript.php?yourargument = $ 1 [PT]最后,我们有了实际的重写规则。 由于我要做的就是将变量传递给PHP脚本以加载内容,因此这就是我的规则的设置方式。 这实际上匹配了我们之前设置的RewriteBase之后的任何数字或字符组合,并将括号内匹配的段传递给我们将$ numbered变量放在重写URL中的任何位置。 因此,第一组括号为$ 1,第二组括号为$ 2,依此类推。 最后,如果要将一个重写规则的输出链接到下一个重写规则,则设置[PT]标志以允许传递重写的URL。

一个重要的注意事项:鉴于人类如何阅读代码,RewriteEngine的工作方式有点有趣...它实际上在测试RewriteCond规则指定的任何条件之前,先在RewriteRule中测试条件正则表达式。 因此,为了测试您的任何条件,整个过程首先必须找到有效的匹配项才能进行操作。

最后,如果要复制和粘贴,以下是完整的代码,准备将其放入.htaccess文件中,并通过将变量传递给脚本来提供无扩展名的URL:

对于PHP

Options +FollowSymlinks
RewriteEngine On
RewriteBase /yourdir
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) yourscript.php?yourargument=$1 [PT]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM