[英]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.