.htaccess 漂亮的网址不起作用


.htaccess pretty URLs are not working

我正在尝试在我的网站上使用漂亮的URL,我对htaccess不太了解,但是经过一些搜索,我最终得到了这个:

RewriteEngine On
RewriteRule ^([a-z]+)'/([0-9]+)'/?$ content.php?action=$1&id=$2 [NC]

我正在尝试更改此设置:

mysite.com/cms/content.php?action=content&id=80

到:

mysite.com/cms/content/80

但不知何故它不起作用,我得到的是空白屏幕和 404 错误,

Failed to load resource: the server responded with a status of 404 (Not Found) --in-- /cms/files/plugin/tinymce/tinymce.min.js

关于 404 错误:它应该从 mystie.com/files/plugin/tinymce/tinymce.min.js(而不是)加载.js文件 mystie.com/cms/files/plugin/tinymce/tinymce.min.js

我的 htaccess 文件位于根文件夹中。我做错了什么吗?

我认为服务器没有读取我的 .htaccess 文件。如何找出问题所在?

您需要

将此规则放在/cms/.htaccess中:

RewriteEngine On
RewriteBase /cms/
RewriteRule ^([a-z]+)/([0-9]+)/?$ content.php?action=$1&id=$2 [NC,L,QSA]

然后,您需要将其添加到页面 HTML: <base href="/" /><head>部分中,以便从该 URL 解析每个相对 URL,而不是当前页面的相对 URL。

RewriteEngine On
RewriteRule ^/cms/([a-z]+)/([0-9]+)$ content.php?action=$1&id=$2 [NC]

删除转义斜杠 ''

如果您的 htaccess 位于根目录中,则需要确保包含子文件夹。试试这个规则。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cms/([a-z]+)/([0-9]+)/?$ /cms/content.php?action=$1&id=$2 [NC,L]

此外,空白屏幕通常意味着PHP错误。

您在其余URL中/cms/,因此您需要将RewriteRule更改为如下所示的内容:

RewriteRule ^cms/([a-z]+)'/([0-9]+)'/?$ content.php?action=$1&id=$2 [NC]

另外,我希望您知道.htaccess无法在某些服务器(如nginx或某些自定义服务器)上运行,即使在Apache服务器上也可以mod_rewrite禁用。

我的猜测是您的脚本和样式是通过相对 URL 链接到的。因为旧 URL /cms/content.php URI 基础/cms/并且您的相对链接都解析为在 /cms/ 下,我认为这就是您想要的。

但是,当您将链接更改为/cms/content/1234时,URI 基数变为/cms/content/,所有相关链接都将使用此库作为其基库,并且由于"内容"甚至不是一个真正的文件夹,所有这些链接都将 404,并且您不会加载任何 CSS 内容或脚本。

将链接更改为绝对网址,或在页面标题中指定 URI 基(在 <head> </head> 标记内):

<base href="/cms/" />