重写我的.HTACCESS文件

时间:2015-05-07 10:10:17

标签: php html .htaccess mod-rewrite rewrite

我知道此问题已在此论坛上多次发布。

而且,我已经按照给出的每一个例子。尝试了每一个代码。

而且,我仍然无法产生预期的效果。

我在重写我的.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 可以接受数百行代码。

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

但是,为什么呢?

我应该在每个RULE之前声明一个条件(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

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

1 个答案:

答案 0 :(得分:0)

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

我在网上找到了一个非常好的解释答案。 Link here

  
    

经过多次迂回尝试,我设法以我想要的方式进行URL重写,这样我就可以做出相当无扩展的功能     我网站的网址(例如domain.com/thispage)。

  
     

因为我个人发现htaccess和mod-rewrite很差   记录除了痛苦的技术apache文档,我   以为我打破了我正在使用的代码:

     

选项+ FollowSymlinks首先,为了安全起见,我们制作   确保启用了FollowSymlinks选项,因此服务器将启用   实际上处理并遵循我们的“虚构”网址。

     

RewriteEngine On RewriteEngine是正在进行的mod-rewrite worker   做我们所有的工作,所以我们必须打开它。

     

RewriteBase / yourdir这允许我们将任何目录设置为基础   重写并使我们更容易编写正则表达式和   重写,因为我们不必处理讨厌的基目录。它的   从一个目录迁移代码时也非常方便   开发服务器到活动站点的根目录。

     

RewriteCond%{REQUEST_URI}!(。[^。/] +)$因为我们不想制作   任何现有文件都不可访问,我们确保URI(在此   case我们的基本目录后的URL的一部分)没有文件   延期。正则表达式更真实地检查它“确实如此   不包含一个句点,后跟一个或多个不是a的字符   期间或斜线。“

     

RewriteCond%{REQUEST_FILENAME}!-d这告诉Rewrite Engine没有   如果URL与服务器上的现有名称匹配,则重写URL   目录标志(即如果它是目录)。

     

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

     

RewriteRule ^(。*)yourscript.php?yourargument = $ 1 [PT]最后,我们有   实际的重写规则。因为我想做的是传递变量   到PHP脚本加载内容,这就是我的规则设置方式。这个   基本匹配我们之后的任何数字或字符组合   我们之前设置的RewriteBase,并传递匹配的内容   在我们将$ $变量放入我们的地方的括号   重写的URL。所以第一组括号是1美元,第二组   套装将达到2美元,依此类推。最后,如果你想连锁   输出一个重写规则,然后将[PT]标志设置为允许   用于重写URL的直通。

     

一个重要的注意事项:RewriteEngine的工作方式有点滑稽   鉴于人类将如何读取代码...它实际上测试了   在测试任何之前,在RewriteRule中调整正则表达式   RewriteCond规则上面指定的条件。所以按顺序   对于你要测试的任何条件,首先要做的就是   找到有效的匹配来操作。

     

最后,如果你想复制和粘贴,这里是整个代码   在一起,准备好进入.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]