我知道此问题已在此论坛上多次发布。
而且,我已经按照给出的每一个例子。尝试了每一个代码。
而且,我仍然无法产生预期的效果。
我在重写我的.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
我已经检查了所有可用的在线教程,并没有在任何地方解决这一问题。
答案 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]